PowerShellを使用して、IIS Webアプリケーション(または潜在的には他の種類のアイテム)が存在するかどうか確認したいと思います。私はGet-Item
でこれを行うことができますが、その項目が存在しない場合はエラーを報告します。これはスクリプトを実行しているユーザにとって誤解を招きます。実際には問題ないと思われます。存在しない場合、エラーなしで項目が存在するか確認してください。
どのようにエラーなくこれを行うのですか?
PowerShellを使用して、IIS Webアプリケーション(または潜在的には他の種類のアイテム)が存在するかどうか確認したいと思います。私はGet-Item
でこれを行うことができますが、その項目が存在しない場合はエラーを報告します。これはスクリプトを実行しているユーザにとって誤解を招きます。実際には問題ないと思われます。存在しない場合、エラーなしで項目が存在するか確認してください。
どのようにエラーなくこれを行うのですか?
コマンドを使用して... get-item blah -ErrorAction SilentlyContinue
レットTest-Path
は、特に、このために設計され、それはパスの項目が存在するか否かを判断します。ブール値を返し、エラーは発生しません。
コマンドレットGet-Item
(など)も使用できますが、直接使用することはできません。 1つの方法が既に提案されています:-ErrorAction SilentlyContinue
を使用してください。実際にはまだエラーが発生することを知っておくことが重要です。それだけでは表示されません。コマンドの後にエラーコレクション$Error
を確認してください。エラーがあります。
ただ、情報
のために(それもTest-Path
代替を持っていないGet-Process
のようないくつかの他のコマンドレットで動作します)このエラーを回避するための面白い方法があります。アイテム "MyApp.exe"(またはプロセス "MyProcess")の存在を確認しようとしているとします。そして、これらのコマンドは、行方不明のターゲットに何も返さないと同時に、彼らはエラーを生成しません:
Get-Item "[M]yApp.exe"
Get-Process "[M]yProcess"
これらのコマンドレットは、ワイルドカードのターゲットのエラーを生成しません。実際には単一のアイテムと一致するこれらの面白いワイルドカードを使用します。
これは私のアプローチです!注目すべき点は、この方法で良い発見をエコーアウトし、存在しないファイルに対しては赤いエラーを出さないことです。 if(Test-path $ Test){write-host $ Test} デフォルトでは、存在しない項目はイベントを持たないため、何も表示されません。 –
これは質問に対する最良のアプローチです –
'-ErrorAction SilentlyContinue'は' -ea si'、 'dir app_offline.htm -ea si |に短縮できます。 del' – yzorg
わかりやすくするために、私はスクリプトで省略しません(質問ごとに)。 – Vimes
厳密に言えば、これは質問に対する答えではありません。以下のTest-Pathの回答は実際のチェックです – SteveC