Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Узнать сумму аптаймов за последнюю неделю

Ответить
Настройки темы
PowerShell - [решено] Узнать сумму аптаймов за последнюю неделю

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Изменения
Автор: Griboed0ff
Дата: 28-09-2021
Описание: перенос темы
Доброго времени суток! Ищу варианты удаленно узнать сумму аптаймов за последнюю неделю. ПК выключается каждый день поэтому просто аптайм не подходит, надо узнать сколько часов отработал удаленный пк за неделю. Отлично было бы сделать это чем-то встроенным типа powershell или легковесной утилитой, мб в реестре где хранится данная инфа. Есть какие-либо идеи? ПК много и поэтому ручные методы не подходят.

Отправлено: 16:22, 28-09-2021

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


ничего нигде сбиваться не должно
Код: Выделить весь код
$hashtable        = [Ordered]@{}
$Name             = 'C'
$Value            = 'B'
$hashtable[$Name] = $Value
$Name             = 'D'
$Value            = 'A'
$hashtable[$Name] = $Value
$hashtable|fl

$ohash = [PSCustomObject]$hashtable
$ohash|fl

Отправлено: 21:58, 07-10-2021 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата alpap:
ничего нигде сбиваться не должно »
Либо я не понял вас, либо вы не вникли.
привожу пример:
Код: Выделить весь код
$dates = @(0..7) # диапозон дат, тут могу вставить любое количество дат
$hashtable = [ordered]@{computername = $env:COMPUTERNAME}
foreach ($date in $dates){
$0 # имя столбца, в каждой итерации разное, то есть их может быть от 1 до бесконечности
$4 # значение столбца $0 в этой итерации
$hashtable.Add($0,$4) # добавляю в таблицу столбец со значением
}
$hashtable # получаю правильную таблицу, с нужным порядком
Правильная таблица - одна строка, начинается с имени пк, далее множество столбцов с датами в именах столбцов и значениями в строке, расположенных по порядку добавления в таблицу.
Но когда я выполняю код на удаленном пк через invoke и получаю таблицу, то порядок столбцов меняется на такой как будь-то я не проставил ordered перед созданием таблицы, пример:
Код: Выделить весь код
$s = New-PSSession $comp # создаю сессию, в которой буду выполнять код
Invoke-Command -Session $s { # далее сам выполняемый код
$dates = @(0..7) # диапозон дат, тут могу вставить любое количество дат
$hashtable = [ordered]@{computername = $env:COMPUTERNAME}
foreach ($date in $dates){
$0 # имя столбца, в каждой итерации разное, то есть их может быть и от 1 до бесконечности
$4 # значение столбца $0 в этой итерации
$hashtable.Add($0,$4) # добавляю в таблицу столбец со значением
}}
$table = Invoke-Command -Session $s {$hashtable} # запрашиваю таблицу из сессии от удаленного пк 
$table # таблица с неправильным порядком столбцов.
Причем, если отобразить финальную таблицу еще в сессии на удаленном пк, то она правильная. Но после того как я ее полую на свой пк, то приходит уже поломанная.
То есть таблица ломается именно тут:
Код: Выделить весь код
$table = Invoke-Command -Session $s {$hashtable}

Отправлено: 18:27, 08-10-2021 | #22


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


ну тогда просто отсортируйте как вам надо:
Код: Выделить весь код
$hashTable = @{
 Name1 = 'ValueA'
 Name2 = 'ValueB'
 Name3 = 'ValueC'
}
$hashTable
'---'
$hashTable.GetEnumerator()|% {'{0} {1}' -f $_.Key, $_.Value}|sort
'---'
$m1 = $hashTable.Keys|foreach {$_}|sort
$m2 = $hashTable.Values|foreach {$_}|sort -desc

for ($i=0; $i -lt $m1.count; $i++) {
  $m1[$i]+' = '+$m2[$i]
}
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:44, 08-10-2021 | #23


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Остановился на своем варианте: передавать через invoke сессию не хеш таблицу, а pscustomobject, не сбивается сортировка.
Итоговый скрипт
Код: Выделить весь код
$outfile = "D:\PowerShell\uptime\test.csv"
$comp = "r48-ser"
$s = New-PSSession $comp
Invoke-Command -Session $s {
$dates = @(0..7)
$hashtable = [ordered]@{computername = $env:COMPUTERNAME}
foreach ($date in $dates){
$0 = (Get-Date).AddDays(-$date).ToShortDateString()
$CurrentTime = [System.DateTime]::Parse(((Get-Date).AddDays(-$date)).ToString("yyyy.MM.dd"))
$Time = [System.Timespan]::Parse("00:00:01")
$adddate = $CurrentTime.Add($Time)
$CurrentTime2 = [System.DateTime]::Parse(((Get-Date).AddDays(-$date)).ToString("yyyy.MM.dd"))
$Time2 = [System.Timespan]::Parse("23:59:59")
$adddate2 = $CurrentTime2.Add($Time2)
$add = Get-Eventlog -logname System | Where-Object {$_.TimeGenerated.ToShortDateString() -eq $0}
$add1 = @([pscustomobject]@{Index='00000';EntryType='00000';InstanceId='00000';Message='00000';Category='00000';CategoryNumber='00000';ReplacementStrings='00000';Source='00000';TimeGenerated=$adddate;TimeWritten='00000';UserName='00000';})
$add2 = @([pscustomobject]@{Index='00000';EntryType='00000';InstanceId='00000';Message='00000';Category='00000';CategoryNumber='00000';ReplacementStrings='00000';Source='00000';TimeGenerated=$adddate2;TimeWritten='00000';UserName='00000';})
$1 = $add + $add1 + $add2 | Sort-Object {Get-Date $_.TimeGenerated} -Descending 
Clear-Variable -Name allsec, summ -Force -ErrorAction SilentlyContinue
$allsec = @(for ($index = 0; $index -lt $1.Count; $index++)
{if ($1.TimeGenerated[$index + 1] -ne $null -and $1.TimeGenerated[$index] -ne $1.TimeGenerated[$index + 1] ){
$2 = $1.TimeGenerated[$index] - $1.TimeGenerated[$index + 1]
if ($2.TotalSeconds -gt 5400){$2.TotalSeconds}}})
$allsec| foreach {$summ += $_}
$3 = ((86400 - $summ) - 2)
$ts =  [timespan]::fromseconds($3)
$4 = "{0:HH:mm:ss}" -f ([datetime]$ts.Ticks)
Write-Host $0 uptime $4
$hashtable.Add($0,$4)
$ps_object = [pscustomobject]$hashtable
}}
$table = Invoke-Command -Session $s {$ps_object}
$table |export-csv $outfile -notype -enc utf8 -d ';' -append

Отправлено: 08:58, 17-11-2021 | #24


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Griboed0ff, коллега, фолдинг — не наш метод?

Отправлено: 17:41, 17-11-2021 | #25


Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Iska, не пользовался никогда. Как видите увлекаюсь индусским легаси кодом :D, но думаю это вылечится при постижении python и json!

Отправлено: 19:55, 23-11-2021 | #26


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1171
Благодарности: 487

Профиль | Отправить PM | Цитировать


Цитата Griboed0ff:
не пользовался никогда »
очень зря, причем в любом коде... фолдинг... кроме того, форматирование, тоже облегчает восприятие кода.

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:38, 24-11-2021 | #27



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Узнать сумму аптаймов за последнюю неделю

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
HDD - [решено] Умирает 2-ой диск за неделю walcot Накопители (SSD, HDD, USB Flash) 7 16-03-2021 09:47
HDD - За одну неделю два диска в RAW surgutfred Накопители (SSD, HDD, USB Flash) 2 17-12-2018 10:51
Разное - [решено] Как узнать последнюю версию видеодрайвера? Алекс-01 Microsoft Windows 10 2 27-06-2018 18:03
Решение контрольных работ за определенную сумму? VbInt Флейм 2 21-01-2011 00:16
Конфигурация за неуказанную сумму для неизвестного применения kuson Выбор отдельных компонентов компьютера и конфигурации в целом 61 22-06-2009 00:41




 
Переход