2017-10-09 145 views
1

我有以下腳本:PowerShell腳本 - 檢查退出代碼

foreach ($server in $ProductList.$SelectedServer) { 
    Invoke-Command -ComputerName $server -Credential domain\user -ScriptBlock { 
     Import-Module WebAdministration 
     echo "restarting AppPool $args[0] ... on $args[1]" 
     Restart-WebAppPool -Name $args[0] -ErrorAction Stop 
     echo "Restarted WebApp $args[0] on $args[1]" 
    } 
} -ArgumentList $SelectedAppPool, $Server 

我想檢查Restart-WebAppPool命令成功執行。如果是這樣,我回應'它工作'其他回聲'它沒有工作'。

目標是提供簡單的簡單英文消息,而不是典型的未處理的異常。

+0

您發佈不可能工作代碼所引發的顯示。 'foreach'循環沒有參數'-ArgumentList'。 –

+0

@AnsgarWiechers是不得不將它移動到Invoke-Command部分。感謝那 – joebegborg07

回答

2

從理論上講,你大部分都是在那裏,我不知道在什麼情況下Restart-WebAppPool引發了終止錯誤,但爲了對它們做任何事情,你需要嘗試/ catch塊:

try { 
    Restart-WebAppPool -Name $args[0] -ErrorAction stop 
    Write-Host "It worked" 
} catch { 
    Write-Host "It did not work" 
    # Error handling goes here. 
} 

的「它的工作」輸出將只如果沒有終止錯誤是由Restart-WebAppPool

+2

添加到這@Joe,你可能想發送一個PSCredential對象,而不僅僅是一個用戶名作爲參數-Credential。否則,在for循環中,您必須多次輸入密碼才能迭代。 –

+1

謝謝@Windos。那就是訣竅。只是爲了澄清。 try/catch是否真的在try段落中執行代碼塊?或者它只是試試/幹運行? – joebegborg07

+1

@ joebegborg07它實際上執行它,但一旦它運行到一個終止錯誤,它會停止,並直接跳到catch塊(因此,如果出現錯誤,你不會看到「它工作」。) – Windos