Изучение нескольких методов получения данных о времени безотказной работы удаленного компьютера с помощью PowerShell

В этой статье блога мы углубимся в различные методы получения информации о времени безотказной работы удаленного компьютера с помощью PowerShell. Под временем безотказной работы понимается продолжительность непрерывной работы компьютера с момента его последней перезагрузки. Мониторинг работоспособности удаленных компьютеров может быть полезен системным администраторам для отслеживания стабильности системы, планирования обслуживания и выявления потенциальных проблем. Мы рассмотрим несколько методов PowerShell, предоставив примеры кода для каждого метода.

Метод 1: инструментарий управления Windows (WMI)
PowerShell предоставляет доступ к инструментарию управления Windows (WMI), который позволяет нам получать информацию, связанную с системой. Мы можем использовать класс Win32_OperatingSystemдля получения свойства LastBootUpTime, которое представляет время последней перезагрузки компьютера.

$computerName = "REMOTE_COMPUTER_NAME"
$operatingSystem = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $computerName
$lastBootUpTime = $operatingSystem.LastBootUpTime
$uptime = (Get-Date) - $lastBootUpTime
Write-Output "Uptime: $uptime"

Метод 2: Invoke-Command с Get-CimInstance
Командлет Invoke-Commandпозволяет нам выполнять команды на удаленных компьютерах. Мы можем объединить его с Get-CimInstance, чтобы получить свойство LastBootUpTime из класса Win32_OperatingSystem.

$computerName = "REMOTE_COMPUTER_NAME"
$lastBootUpTime = Invoke-Command -ComputerName $computerName -ScriptBlock {
    Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object -ExpandProperty LastBootUpTime
}
$uptime = (Get-Date) - $lastBootUpTime
Write-Output "Uptime: $uptime"

Метод 3: Get-WinEvent с идентификатором события 6005
В журналах событий Windows хранится ценная информация, включая события запуска системы. Мы можем использовать командлет Get-WinEventдля фильтрации событий на основе идентификатора события 6005, который представляет событие «Служба журнала событий была запущена». Получив временную метку этого события, мы можем рассчитать время безотказной работы.

$computerName = "REMOTE_COMPUTER_NAME"
$logName = "System"
$eventId = 6005
$event = Get-WinEvent -ComputerName $computerName -FilterHashtable @{
    LogName = $logName
    ID = $eventId
} | Select-Object -First 1
$lastBootUpTime = $event.TimeCreated
$uptime = (Get-Date) - $lastBootUpTime
Write-Output "Uptime: $uptime"

Метод 4: System.Diagnostics PerformanceCounter
Пространство имен System.Diagnosticsпредоставляет класс PerformanceCounter, который позволяет нам получать доступ к различным показателям производительности системы, включая время безотказной работы. Мы можем использовать счетчик System\Up Timeдля получения времени безотказной работы.

$computerName = "REMOTE_COMPUTER_NAME"
$counterCategory = "System"
$counterName = "Up Time"
$uptimeCounter = New-Object System.Diagnostics.PerformanceCounter($counterCategory, $counterName, "", $computerName)
$uptime = $uptimeCounter.NextValue()
Write-Output "Uptime: $uptime"