Networking

異常後循環執行直到失敗

  • April 4, 2020
do

{

Try{
if (New-Object System.Net.Sockets.TCPClient -ArgumentList $server,3389 )  
{ 

Write-Host $server 'Ready for RDP connection'-ForegroundColor Green }
}
catch { write-warning $error[0] }
}until ($? -eq $true)

上面的腳本塊在異常後退出可以有人幫助如何繼續直到它變為

關於自動變數

$?

包含上次操作的執行狀態。如果最後一個操作成功則包含 True ,如果失敗則包含False 。

在您的程式碼中,最後一個操作是 ( successful )Write-Warning $error[0]

我會在之後使用Do { … } While ($true)withbreak聲明Write-Host $server 'Ready for RDP connection -ForegroundColor Green'

如果您堅持使用Until關鍵字,則將程式碼片段重寫如下:

do {
 $LastSuccess = $true
 Try {
   if (New-Object System.Net.Sockets.TCPClient -ArgumentList $server,3389 )  
   {
      Write-Host $server 'Ready for RDP connection'-ForegroundColor Green
      ### here's a possible place for (facultative) break
   }
 }
 catch { 
   write-warning $error[0]
   $LastSuccess = $false
 }
} until ( $LastSuccess )

在任何情況下,我都會將其儲存New-Object System.Net.Sockets.TCPClient到一個變數中。如果提供了遠端主機的主機名和埠號,此建構子將自動嘗試連接-ArgumentList $server,3389,就是這種情況 ( )。然後我假設一個連接已經建立並且應該稍後在腳本中使用Close()和/或Dispose()和/或Finalize()方法關閉(並且應該釋放它的資源) 。

順便說一句,iftry塊絕對是多餘的……

引用自:https://serverfault.com/questions/1010458