Простой мониторинг работы сервера средствами PowerShell

Задача: Необходимо определить насколько часто пропадает связь с сервером в течении одной минуты.

Задача сама по себе обсурдна, но рассмотрим мы ее для примера. Можно легко переделать под свои нужды и увеличить интервал проверки.

При условии отсутствия других средств мониторинга работы сервера или другого сетевого оборудования поддерживающего ICMP пакеты. Можно воспользоваться следующим скриптом.

$filepath = "D:\diagnostic\testconnection.log"
 
$i = 0
$povtor = 10
while ($i -lt $povtor)
{
    $getdate = (Get-Date -format "dd-MM-yyyy-HH-mm-ss").tostring()
     $s = Test-NetConnection -ComputerName 192.168.0.1
    if($s.PingSucceeded -eq $false){
        $msg = $getdate + " " + $s.RemoteAddress.ToString() + " - Не пингуется"
        Out-File -FilePath $filepath -InputObject $msg -Append
    }
    else
    {
        $msg = $getdate + " " +$s.RemoteAddress.ToString() + " - Пингуется"
        Out-File -FilePath $filepath -InputObject $msg -Append
    }
    $i++ # увеличиваем вход
    Wait-Event -Timeout 5 # ждем 5 секунд
}

Весь скрипт по порядку
$filepath = "D:\diagnostic\testconnection.log" переменной присваиваем значение, которое будет определять в какой файл мы будем писать данные для дальнейшего прочтения.
$i  - переменная счетчик с таким же успехом можно использовать любой другой цикл который вам нравится. для опыта использования я взял такой
$povtor - указываем в данной переменной количество повторов которые сделает цикл до прекращения работы
while ($i -lt $povtor) - начало цикла и условия выхода из цикла. С условием необходимо быть предельно внимательным так как цикл While может зациклится если не верно указать уловие выхода.

-lt - необходимо отдельно остановится на условии выхода оно читается как Пока $i меньше $povtor

$getdate - данной переменной присваиваем значение текущей даты и текущего времени в том формате в котором нам удобно его использовать и переводим это все дело в строковый тип данных
 $s - переменной присваиваем результат работы Командлета Test-NetConnection с параметром -ComputerName равным 192.168.0.1. Тип переменной System.Object

Дальше условие
if($s.PingSucceeded -eq $false) Если на запрос нет ответа тогда формируем фот такое сообщение : $msg = $getdate + " " + $s.RemoteAddress.ToString() + " - Не пингуется" и записываем его в файл Out-File -FilePath $filepath -InputObject $msg -Append
Иначе формируем вот такое сообщение $msg = $getdate + " " +$s.RemoteAddress.ToString() + " - Пингуется" и то же пишем его в файл Out-File -FilePath $filepath -InputObject $msg -Append
Дальше выходим из условия и увеличиваем переменную-счетчик на 1.

Wait-Event -Timeout 5 Ждем 5 секнд и переходим к следующему этапу цикла

Комментарии

Популярные сообщения из этого блога

PowerShell. Коммандлет для паузы в выполнении скрипта Wait-Event

Первоначальная настройка МФУ Kyocera FS-1035MFP для печати по сети