2017-11-28 4 views
0

私はプログラマーではなく、PowerShellスクリプト/コマンドで実際にエラー処理を行ったことがないので、ときどき自分のタスクを達成するためにpowershellを使用するだけです。初心者の助けPowershell Exception catching

私は下のサンプルコードで例外をキャッチすることに頭を抱えるように苦労しています。間違った方法で動作しているようです。ここでのコードは次のとおりです。

$Computers = Get-ADComputer -SearchBase 
"OU=Desktops,OU=Computers,OU=Managed,DC=domain,DC=local" -Filter * | select Name 
$Table= "" 
$Computers | Foreach { 
    $Name = $_.Name 
    try { 
     $Table += Get-WmiObject -Class Win32_Product -ComputerName $Name | 
     Where-Object {$_.Name -eq "Product Name"} | select PSComputerName,Name,Version 
    } 
    catch { 
     $Name + " unavailable" 
    } 
} 

起こるようです何を、コンピュータがオフあるいは利用できない場合では、Get-WmiObjectコマンドコマンドが失敗し、PowerShellウィンドウに例外メッセージが表示されます。私はこの例外を見るためにCatchステートメントを期待し、代わりにコンピュータの$ Nameとテキスト "Unavailable"を出力します。

利用できないコンピュータの例外メッセージを表示した後、成功した場合、$ Name + "unavailable"と表示されます。

私はpowershellでのエラー処理の背後にあるコンセプトを誤解していますが、上記のコードを調整してエラーのあるコンピュータをキャッチし、それらと何か異なることができますか?あなたが必要とする

try { 
    $Table += Get-WmiObject -Class Win32_Product -ComputerName $Name -ErrorAction Stop |Where-Object {$_.Name -eq "Product Name"} | select PSComputerName,Name,Version 
} 
catch { 
    $Name + " unavailable" 
} 
+0

error! 
[アダムベルトラムによって書かれたこの記事](https://mcpmag.com/articles/2016/08/18/try-catch-block -in-powershell.aspx)は、try/catchブロックの動作の仕組みとその動作方法を示します。 –

+0

ありがとうブライスは、try/catchの理解を得るためにそれを見ています。ありがとう – Eds

+2

@BryceMcDonald [この記事](https://kevinmarquette.github.io/2017-04-10-Powershell-exceptions-everything-youever-wanted-to-know/)もすべてのことを説明するのにはかなり良いです例外。 – TheIncorrigible1

答えて

3

Get-WmiObjectは何 -terminatingエラーとして知られているスロー電話番号Get-WMIObject-ErrorAction Stopを追加してください。

例:

try{ 
    Get-WmiObject -Class asdf -ErrorAction Stop 
} 
catch{ 
    Write-Host error! 
} 

戻り

+0

マティアスさん、ありがとうございました – Eds

2

:実行がエラーで終了しcatchブロックが実行持って持つために、あなたはそれを呼び出すときに-ErrorAction Stopを指定する必要があります -

+0

ありがとうライアン。これを行かせる – Eds

関連する問題