|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Узнать сумму аптаймов за последнюю неделю |
|
PowerShell - [решено] Узнать сумму аптаймов за последнюю неделю
|
Старожил Сообщения: 211 |
Профиль | Отправить PM | Цитировать
Доброго времени суток! Ищу варианты удаленно узнать сумму аптаймов за последнюю неделю. ПК выключается каждый день поэтому просто аптайм не подходит, надо узнать сколько часов отработал удаленный пк за неделю. Отлично было бы сделать это чем-то встроенным типа powershell или легковесной утилитой, мб в реестре где хранится данная инфа. Есть какие-либо идеи? ПК много и поэтому ручные методы не подходят.
|
|
Отправлено: 16:22, 28-09-2021 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
|
|
Отправлено: 20:40, 29-09-2021 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 22:25, 29-09-2021 | #12 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
|
|
Отправлено: 17:52, 30-09-2021 | #13 |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать Это нереально, даже если через какой-то страшный геморрой заниматься анализом логов со всех машин. Нормальных, сколько-нибудь достоверных данных получить не удастся.
|
------- Отправлено: 21:32, 30-09-2021 | #14 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
Цитата DJ Mogarych:
За индуский код соррян :D сам скрипт: $dates = @(0..90) 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} 01.10.2021 uptime 09:09:13 30.09.2021 uptime 11:01:59 29.09.2021 uptime 00:00:00 28.09.2021 uptime 09:25:00 27.09.2021 uptime 09:45:47 26.09.2021 uptime 03:16:45 25.09.2021 uptime 05:43:20 24.09.2021 uptime 11:09:27 23.09.2021 uptime 10:45:19 22.09.2021 uptime 06:37:43 21.09.2021 uptime 06:42:10 20.09.2021 uptime 07:13:36 19.09.2021 uptime 06:30:18 18.09.2021 uptime 04:13:50 17.09.2021 uptime 09:14:27 16.09.2021 uptime 10:30:12 15.09.2021 uptime 14:10:59 14.09.2021 uptime 07:49:47 13.09.2021 uptime 08:16:49 12.09.2021 uptime 00:00:00 11.09.2021 uptime 00:00:00 10.09.2021 uptime 00:00:00 На данном этапе немного завис.. Мне нужно записывать результат в таблицу: каждая дата имя столбца и соответственно результат аптайм. Так как период дат может быть разный, пока не сообразил как составить таблицу. На счет удаленных машин, планирую этот кусок кода выполнять через invoke-comand, а забирать только результат в виде переменной, которая таблица, которую я еще не придумал как сделать. Плюс использовать workflow для параллельных процессов. |
||
Последний раз редактировалось Griboed0ff, 01-10-2021 в 23:41. Отправлено: 19:56, 01-10-2021 | #15 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Сама сумма результатов уже стала не так важна, так как если получится доставить данные в таблицу в нужном виде, то сумму будет скорее всего можно будет найти.
Цитата Iska:
|
|
Отправлено: 20:38, 01-10-2021 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Griboed0ff, то, что пытаетесь — уже плюс. Пусть даже и не получится. Попутные знания, полученные в процессе, не будут лишними.
Цитата Griboed0ff:
|
|
Отправлено: 20:42, 01-10-2021 | #17 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Цитата Griboed0ff:
|
|||
Последний раз редактировалось Griboed0ff, 01-10-2021 в 23:39. Отправлено: 23:28, 01-10-2021 | #18 |
fascinating rhythm Сообщения: 6491
|
Профиль | Отправить PM | Цитировать Цитата Griboed0ff:
|
|
------- Последний раз редактировалось DJ Mogarych, 02-10-2021 в 21:50. Отправлено: 21:44, 02-10-2021 | #19 |
Старожил Сообщения: 211
|
Профиль | Отправить PM | Цитировать Цитата DJ Mogarych:
За то пришла идея своего решения: я просто каждый цикл добавляю значения в хеш таблицу, далее в pscustomobject, экспорт в таблицу. Получается нужный результат, на локальном ПК, но мне нужно делать эти вычисления на удаленных машинах, а получать только результат. Далее я завернул это в invoke сессию и хотел получать от сессии только хеш таблицу и даже получил, но с одним минусом. Минус в том, что порядок столбцов поменялся, хотя я указывал [ordered] и это работало для локального использования, но когда получаю таблицу из сессии то порядок меняется, как будь-то свойство [ordered] теряет силу. Позже подумал, да и ладно, могу же получить сразу pscustomobject и сделал это, но и тут косяк, но совсем небольшой. В таблицу добавляются данные, которые мне не нужны, три столбца в конце. То есть у меня всегда какие-то проблемы с получением данных из invoke сессии в нужном виде. Меня уже устраивает результат, но я и в будущем в других задачах хочу получать данные из сессий, поэтому надо бы разобраться. скрипт
$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 пример результата
Как получать данные из сесии в хеш таблицах, но чтобы порядок столбцов не сбивался?! Или как не получать в pscustomobject не нужные данные, которые так же появились именно при запросе из сессии?! МБ вообще есть еще решения, которые будут полезны?! |
|
Последний раз редактировалось Griboed0ff, 07-10-2021 в 21:13. Отправлено: 16:43, 07-10-2021 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|