Сегодня скриптом дня назначается вот это чудо:
# Заголовок консоли скрипта #
[System.Console]::Title = "Проверка доступности"
# Добавляем зависимость #
Add-Type -AssemblyName System.Windows.Forms
# Задайте имя или IP-адрес хоста #
$hostname = Read-Host "Введите имя узла или IP-адрес"
$pingResult = $false
# Функция для пинга #
function Test-Ping
{
param ([string]$hostname)
$ping = Test-Connection -ComputerName $hostname -Count 1 -Quiet
return $ping
}
# Функция для отображения сообщения #
function Show-Message {
param ([string]$message,
[string]$title)
$msgBox = New-Object System.Windows.Forms.Form
$msgLabel = New-Object System.Windows.Forms.Label
# Настройки окна #
$msgBox.Text = $title
$msgBox.Size = New-Object System.Drawing.Size(300, 150)
$msgBox.MaximizeBox = $false
$msgBox.MinimizeBox = $false
$msgBox.StartPosition = "CenterScreen"
$msgBox.TopMost = $true
$msgBox.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::FixedDialog
# Настройки метки сообщения #
$msgLabel.AutoSize = $false
$msgLabel.Size = New-Object System.Drawing.Size(280, 70)
$msgLabel.Location = New-Object System.Drawing.Point(10, 10)
$msgLabel.Text = $message
$msgLabel.TextAlign = [System.Drawing.ContentAlignment]::MiddleCenter
$msgLabel.Font = New-Object System.Drawing.Font("Arial", 14)
$msgBox.Controls.Add($msgLabel)
# Показать окно #
$msgBox.ShowDialog()
}
# Выводим сообщение #
Write-Host -ForegroundColor Yellow "Ждём доступности узла $hostname..."
# Основной цикл #
while ($true)
{
# Проверка доступности хоста #
$currentPingResult = Test-Ping -hostname $hostname
if ($currentPingResult -and -not $pingResult)
{
# Хост стал доступен, выводим сообщение #
$pingResult = $true
Write-Host -ForegroundColor Green "$hostname доступен!"
Show-Message -title $hostname -message "Доступен!"
break
}
elseif (-not $currentPingResult)
{
# Хост недоступен #
$pingResult = $false
}
# Задержка перед следующим пингом #
Start-Sleep -Seconds 3
}
Скрипт позволяет запустить пинговалку и избавить от муторного наблюдения за результатом. Тестировал скрипт в задаче проброса хоста через подсети. Потом с помощью этой чудо-штуковины вылавливал вновь включенные машины.
Принцип работы скрипта очень прост: как только удалённый хост ответит на ping — скрипт создаст окно, расположенное по центру экрана и поверх всех окон с надписью:

Как только нажмёте на крестик — скрипт завершит работу. Задача выполнена.
Такой метод проверки доступности отдельного узла очень выручает, особенно когда под рукой нет никаких иных средств мониторинга отдельных хостов. Разумеется, всё это совсем не применимо для сетей с нестабильным пингом.