Простой мониторинг работы сервера средствами 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 секнд и переходим к следующему этапу цикла
Задача сама по себе обсурдна, но рассмотрим мы ее для примера. Можно легко переделать под свои нужды и увеличить интервал проверки.
При условии отсутствия других средств мониторинга работы сервера или другого сетевого оборудования поддерживающего 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 секнд и переходим к следующему этапу цикла
Комментарии
Отправить комментарий