1
我有一個腳本,做一些服務器維護。部分工作是停止並重新啓動主機服務器上的服務。告知服務何時完全重新聯機的最簡單方法是嘗試連接到管理端口。一旦你能夠連接到管理端口,服務就緒並準備就緒。夠簡單。這段代碼中循環,直到它重新聯機:PowerShell的錯誤捕獲
function test-port {
$PortProbe = New-Object Net.Sockets.TcpClient
$ErrorActionPreference = "SilentlyContinue"
while ($PortProbe.Connected -eq 0){
$PortProbe.Connect("localhost",3041)
write-host "Server is off line... waiting for it to come online."
sleep 1
}
write-host "Server is back online!"
$ErrorActionPreference = "Continue"
$PortProbe.Close()
}
test-port
所以在我的劇本我做我的工作,重新啓動服務,然後調用「測試端口」有腳本等待服務恢復聯機在繼續之前。
我遇到的問題是,如果我在腳本的通用陷阱,當端口還沒有準備好它捕獲連接錯誤。
Exception calling "Connect" with "2" argument(s): "No connection could be made because the target machine actively refused it 127.0.0.1:3041"
At line:6 char:27
+ $PortProbe.Connect <<<< ("localhost",3041)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
我有在某些情況下確實奇怪的錯誤發生在年底陷阱聲明,它會揭開序幕的電子郵件警報。但它打破了測試端口功能的功能。
從理論上講,我可以捕獲這個特定的TCP/IP連接錯誤,並告訴它只是繼續像什麼也沒有發生,但我不知道如何告訴類的錯誤信息是什麼。我認爲它會是這樣的:
trap [Net.Sockets.TcpClient] { #Don't Panic
}
但這是不對的。
有什麼建議嗎?我需要完全不同的處理方式嗎?