2010-12-06 42 views
24

PowerShellを使用して、IIS Webアプリケーション(または潜在的には他の種類のアイテム)が存在するかどうか確認したいと思います。私はGet-Itemでこれを行うことができますが、その項目が存在しない場合はエラーを報告します。これはスクリプトを実行しているユーザにとって誤解を招きます。実際には問題ないと思われます。存在しない場合、エラーなしで項目が存在するか確認してください。

どのようにエラーなくこれを行うのですか?

答えて

26

コマンドを使用して... get-item blah -ErrorAction SilentlyContinue

alt text

+6

'-ErrorAction SilentlyContinue'は' -ea si'、 'dir app_offline.htm -ea si |に短縮できます。 del' – yzorg

+4

わかりやすくするために、私はスクリプトで省略しません(質問ごとに)。 – Vimes

+0

厳密に言えば、これは質問に対する答えではありません。以下のTest-Pathの回答は実際のチェックです – SteveC

50

レットTest-Pathは、特に、このために設計され、それはパスの項目が存在するか否かを判断します。ブール値を返し、エラーは発生しません。

コマンドレットGet-Item(など)も使用できますが、直接使用することはできません。 1つの方法が既に提案されています:-ErrorAction SilentlyContinueを使用してください。実際にはまだエラーが発生することを知っておくことが重要です。それだけでは表示されません。コマンドの後にエラーコレクション$Errorを確認してください。エラーがあります。


ただ、情報

のために(それもTest-Path代替を持っていないGet-Processのようないくつかの他のコマンドレットで動作します)このエラーを回避するための面白い方法があります。アイテム "MyApp.exe"(またはプロセス "MyProcess")の存在を確認しようとしているとします。そして、これらのコマンドは、行方不明のターゲットに何も返さないと同時に、彼らはエラーを生成しません:

Get-Item "[M]yApp.exe" 
Get-Process "[M]yProcess" 

これらのコマンドレットは、ワイルドカードのターゲットのエラーを生成しません。実際には単一のアイテムと一致するこれらの面白いワイルドカードを使用します。

+0

これは私のアプローチです!注目すべき点は、この方法で良い発見をエコーアウトし、存在しないファイルに対しては赤いエラーを出さないことです。 if(Test-path $ Test){write-host $ Test} デフォルトでは、存在しない項目はイベントを持たないため、何も表示されません。 –

+0

これは質問に対する最良のアプローチです –

関連する問題