В этой статье я покажу как удаленно узнать время загрузки нескольких компьютеров с помощью простого PowerShell скрипта. Идея этой статьи возникла недавно, когда я по RDP перезагрузил несколько удаленных серверов Windows и захотел узнать, когда загрузилась на них операционная система.
В Powershell 3.0 и выше для получения информации о времени загрузки Windows можно использовать командлет Get-CimInstance. Командлет Get-CimInstance позволяет обращаться к различным классам Win32_OperatingSystem. Полный список доступных классов и методов можно вывести с помощью команды:
Get-CimInstance Win32_OperatingSystem | Get-Member
В данном случае нас интересует свойство LastBootUpTime.
Проверим время загрузки компьютер, на котором запускается команда:
Get-CimInstance -ClassName win32_OperatingSystem | select csname, lastbootuptime
Чтобы проверить время загрузки Windows на удаленном компьютере, нужно использовать атрибут ComputerName. Например, проверим дату загрузки Windows на компьютере с именем Server1.
Get-CimInstance -ClassName win32_operatingsystem -ComputerName Server1| select csname, lastbootuptime
В PowerShell 2.0 командлет Get-CimInstance отсутствует. Поэтому для получения информации из WMI классов нужно использовать другой командлет — Get-WMIObject.
Get-WMIObject win32_operatingsystem | select csname, @{LABEL=’LastBootUpTime’; EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}
Для преобразования времени из формата TimeStamp в привычный вид мы воспользовались командлетом ConverttoDateTime.
Проверим время загрузки Windows сразу на нескольких серверах (имена серверов указываются через запятую):
Get-WMIObject win32_operatingsystem -computerName server1,server2,server3 | select csname, @{LABEL=’LastBootUpTime’; EXPRESSION={$_.ConverttoDateTime($_.lastbootuptime)}}
Если нужно узнать время загрузки сразу на большом количестве компьютеров в сети, список компьютеров можно сохранить в текстовый файл (каждая строка – отдельное имя компьютера) и с помощью цикла foreach проверить время загрузки:
$Servers = Get-Content C:\PS\ComputersList.txt
foreach ($Server in $Servers){
Get-CimInstance -ClassName win32_operatingsystem -ComputerName $Server | select csname, lastbootuptime
}
2 комментария
Что-то не работает через текстовый файл, кучу ошибок вываливается
Какая ОС и версия PowerShell? На WS2012R2 проверено — работает.
У вас WInRM на удаленных хостах включени и настроен?
Ну и ошибки покажите, по ним проще понять чего не хватает.