PowerShell: Показать время работы всех серверов Windows
Допустим, вы хотите получить обзор времени работы всех серверов Windows в вашем домене. Эта информация очень важна, и вы должны регулярно проверять время работы своих сервисов. Вы помните 5 девяток? Я говорю о 99,999% времени работы сервисов. Это значение хорошо известно как основа для качественных услуг.
Цель
Мне нравится начинать с цели. Читатель имеет возможность увидеть, в чем состоит цель, и решить, стоит ли читать дальше. Как и обещал, я дам вам команду PowerShell, которая получает все время работы всех включенных присоединенных к домену серверов Windows. Я создал небольшую функцию без параметров, названную Get-UpTimeAllServer.
Вывод будет выглядеть так:
Если один из ваших серверов недоступен из-за сетевой ошибки, отсутствующей конфигурации WinRM или по любой другой причине, то сервер будет отмечен как «Сервер не может быть достигнут».
Функция
Все вышеперечисленное обернуто в функцию. Вот она:
function Get-UpTimeAllServer {
.SYNOPSIS
Get-UpTimeAllServer is an advanced Powershell function. It shows the uptime of all domain joined and enabled Windows servers.
.DESCRIPTION
Uses Get-CimInstance and a Try/Catch block.
.PARAMETER
None
.EXAMPLE
Get-UpTimeAllServer
.NOTES
Author: Patrick Gruenauer
Web: https://active-directory.ru
$servers=(Get-ADComputer -Filter 'operatingsystem -like "*server*"-and enabled -eq "true"').Name
$result=@()
Foreach ($s in $servers) {
Try {
$up=(Get-CimInstance -ClassName win32_operatingsystem -ComputerName $s -ErrorAction Stop).LastBootUpTime
$uptime=((Get-Date) - $up)
$result+=New-Object -TypeName PSObject -Property ([ordered]@{
'Server'=$s
'LastBootUpTime'=$up
'Days'=$uptime.Days
'Hours'=$uptime.Hours
'Minutes'=$uptime.Minutes
'Seconds'=$uptime.Seconds
})
}
Catch {
$result+=New-Object -TypeName PSObject -Property ([ordered]@{
'Server'=$s
'LastBootUpTime'='Server could not be reached'
})
}
}
}
Вы можете скачать функцию здесь:
ПолучитьВремяСработкиВсехСерверов
Запустите этот скрипт в PowerShell или скопируйте его в
C:\Программные файлы\WindowsPowerShell\Модули
Создайте там папку Get-UpTimeAllServer и сохраните загруженный файл как PSM1. Затем команда будет доступна каждый раз при запуске PowerShell.
Увидимся в следующий раз с крутыми штуками на Powershell!


