ファイルの移動、コピー、削除などの処理を安全に行うための関数
function exec_sideeffect($wip=$WhatIfPreference, $scriptblock) {
$wip_orig = $WhatIfPreference
$eap_orig = $ErrorActionPreference
$WhatIfPreference = $wip -or $wip_orig
$ErrorActionPreference = "stop"
try {
&$scriptblock
} catch [Exception] {
throw $Error[0]
} finally {
$WhatIfPreference = $wip_orig
$ErrorActionPreference = $eap_orig
}
}
説明
- $WhatIfPreferenceと$ErrorActionPreferenceを一時保存し終了後、元に戻す。
- 例外安全。
- 引数を省略すれば現在の$WhatIfPreferenceに従う。
cmd.exeで発生したエラーをPowerShellの例外に置き換える。
function exec_cmd($str) {
cmd /c $str | Out-Null
if($lastexitcode -ne 0) { throw "Exception : cmd /c $str" }
}
説明
- 正常にコマンドが実行されたら$lastexitcodeに0が入る。
- コマンド実行後、そのままでは終了を待機せず次の処理に移ってしまう。そこで、パイプラインでOut-Nullに接続することで待機することとする。
使用法
function processHoge {
exec_sideeffect -Wip $True -ScriptBlock {
gci -filter "*.jpg" | %{ mv $_.FullName $target_dir }
exec_cmd "hogehoge.bat"
}
}
説明
- 引数で指定したWhatIfPreferenceでScriptBlockを実行する。
- hogehoge.bat内のエラーは例外として捕捉される。