У меня есть скрипт PowerShell, который проверяет, является ли соединение с IP-адресом живым. Я добавил таймер к коду, чтобы он зацикливался и проверял в течение 4 минут, затем спал, затем снова запускался. Я также добавил этот скрипт в планировщик задач, который запускается каждые 5 минут.
Однако моя проблема заключается в том, что скрипт записывает подробности об ошибках только в том случае, если ошибки происходят вне цикла while. Если во время зацикливания кода возникает ошибка, переменная ошибки пуста, и, к сожалению, все ошибки происходят внутри цикла.
Это код, который у меня есть. Помимо вышесказанного все работает отлично. Есть предложения или ответы?
function Make_Decision() {
if ($val -eq 0) {
$msg = "Connection to [$IPaddress] FAILED`n"
Add-Content -path C:\path\results.txt -value "[$date] - { $msg }"
Send_Email_Groups
}
}
function Test_Port_Connection() {
$date = Get-Date -Format g
$portNumber = 0000
$IPaddress = '000.00.00.00'
$timeout = New-TimeSpan -Minutes 4
$sw = [Diagnostics.Stopwatch]::StartNew()
$host_connection = New-Object System.Net.Sockets.TCPClient
try {
$host_connection.Connect($IPaddress, $portNumber)
} catch {
$erro = "[$date] - $_"
$erro | Out-File C:\path\errors.txt -Append
}
while ($sw.elapsed -lt $timeout) {
if (($host_connection.Connected) -and (Test-Connection -IPAddress $IPaddress -Count 1 -ErrorAction SilentlyContinue)) {
$val = 1
} else {
$val = 0
break
}
Start-Sleep -Seconds 1
} # end of while loop
Make_Decision
}
Test_Port_Connection