PowerShell/コマンドレットのエラーをTry..Catchする方法
の編集
Top
/
PowerShell
/
コマンドレットのエラーをTry..Catchする方法
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#navi(../) * PowerShellのコマンドレットのエラーをTry..Catchする方法 [#x217b05f] PowerShellのコマンドレットでエラーが発生したときに Try Catch したいのですが、コマンドレットはエラー返却のため Catch の処理が動きません。~ しかし、 ''-ErrorAction Stop'' をコマンドレットに設定すれば例外として Catch でトラップすることができます。 以下にサンプルを記します。 #contents * 動作確認環境 [#wedfb997] - Windows 10 22H2 - PowerShell PS C:\> $PSVersionTable.PSVersion.ToString() 5.1.19041.3636 * コマンドレットのエラーを Catch でトラップするサンプル [#oe9c1a46] 以下、Get-ChildItem コマンドレットを使った例となります。 ** 通常動作 [#f35dc25c] 指定したパスがないのでエラーが表示されます。 PS C:\> $non_existent_path = 'foo' PS C:\> Get-ChildItem $non_existent_path Get-ChildItem : パス 'C:\foo' が存在しないため検出できません。 発生場所 行:1 文字:1 + Get-ChildItem $non_existent_path + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\foo:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand ** Try Catch を試す [#u3dbabfc] Catch にトラップされず、finallyの処理は実行されました。 ***サンプルコード [#f8ea3178] $non_existent_path = 'foo' try { Get-ChildItem $non_existent_path } catch { Write-Host 'catch' } finally { Write-Host 'finally' } ***実行結果 [#ddfbe93e] Get-ChildItem : パス 'C:\foo' が存在しないため検出できません。 発生場所 行:3 文字:3 + Get-ChildItem $non_existent_path + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\foo:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand finally ** Try Catch を試す [#qbece2d8] ''-ErrorAction Stop''をコマンドレットに追記して実行すると Catch の処理が動作します。 ***サンプルコード [#b25ae6bf] $non_existent_path = 'foo' try { Get-ChildItem -ErrorAction Stop $non_existent_path } catch { Write-Host 'catch' } finally { Write-Host 'finally' } ***実行結果 [#s0f345cb] catch finally * 例外メッセージを取得する [#n6c57518] 以下の構文により Catch にトラップされた例外メッセージを取得することができます。 $_.Exception.Message ** サンプルコード [#obc9a559] Catch に $_.Exception.Message を追記しています。 $non_existent_path = 'foo' try { Get-ChildItem -ErrorAction Stop $non_existent_path } catch { Write-Host 'catch' Write-Host $_.Exception.Message } finally { Write-Host 'finally' } ** 実行結果 [#w22babbe] catch パス 'C:\foo' が存在しないため検出できません。 finally 以上、コマンドレットのエラーを Try Catch でトラップする方法でした。 #br #br
タイムスタンプを変更しない
#navi(../) * PowerShellのコマンドレットのエラーをTry..Catchする方法 [#x217b05f] PowerShellのコマンドレットでエラーが発生したときに Try Catch したいのですが、コマンドレットはエラー返却のため Catch の処理が動きません。~ しかし、 ''-ErrorAction Stop'' をコマンドレットに設定すれば例外として Catch でトラップすることができます。 以下にサンプルを記します。 #contents * 動作確認環境 [#wedfb997] - Windows 10 22H2 - PowerShell PS C:\> $PSVersionTable.PSVersion.ToString() 5.1.19041.3636 * コマンドレットのエラーを Catch でトラップするサンプル [#oe9c1a46] 以下、Get-ChildItem コマンドレットを使った例となります。 ** 通常動作 [#f35dc25c] 指定したパスがないのでエラーが表示されます。 PS C:\> $non_existent_path = 'foo' PS C:\> Get-ChildItem $non_existent_path Get-ChildItem : パス 'C:\foo' が存在しないため検出できません。 発生場所 行:1 文字:1 + Get-ChildItem $non_existent_path + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\foo:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand ** Try Catch を試す [#u3dbabfc] Catch にトラップされず、finallyの処理は実行されました。 ***サンプルコード [#f8ea3178] $non_existent_path = 'foo' try { Get-ChildItem $non_existent_path } catch { Write-Host 'catch' } finally { Write-Host 'finally' } ***実行結果 [#ddfbe93e] Get-ChildItem : パス 'C:\foo' が存在しないため検出できません。 発生場所 行:3 文字:3 + Get-ChildItem $non_existent_path + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\foo:String) [Get-ChildItem], ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand finally ** Try Catch を試す [#qbece2d8] ''-ErrorAction Stop''をコマンドレットに追記して実行すると Catch の処理が動作します。 ***サンプルコード [#b25ae6bf] $non_existent_path = 'foo' try { Get-ChildItem -ErrorAction Stop $non_existent_path } catch { Write-Host 'catch' } finally { Write-Host 'finally' } ***実行結果 [#s0f345cb] catch finally * 例外メッセージを取得する [#n6c57518] 以下の構文により Catch にトラップされた例外メッセージを取得することができます。 $_.Exception.Message ** サンプルコード [#obc9a559] Catch に $_.Exception.Message を追記しています。 $non_existent_path = 'foo' try { Get-ChildItem -ErrorAction Stop $non_existent_path } catch { Write-Host 'catch' Write-Host $_.Exception.Message } finally { Write-Host 'finally' } ** 実行結果 [#w22babbe] catch パス 'C:\foo' が存在しないため検出できません。 finally 以上、コマンドレットのエラーを Try Catch でトラップする方法でした。 #br #br
テキスト整形のルールを表示する