はじめに
作成したPowershellスクリプトをサーバ環境で実行させる場合、複数ユーザが実行してしまう可能性を考慮し、多重軌道を禁止する処理をmutexにて実装します。
実装
mutexの実装はとても簡単で、System.Threading.Mutexを利用します。
$mutexObj = New-Object System.Threading.Mutex -ArgumentList $false, "Global¥$(split-Path -Path $PSCommandPath -Leaf)"
try{
# foobaa
} catch [System.Threading.AbandonedMutexException] {
# The previous execution was forcibly terminated.
} finally {
$mutexObj.ReleaseMutex()
$mutexObj.Close()
}
まず$mutexObjとしてオブジェクトを作成します。
この時の引数ですが、第2引数は実行したPowershellScriptのファイル名を指定しています。
実際の処理はtry-catch-finallyの中に記載します。
最後のfinally部分でmutexを開放します。
powershellのfinallyに記載しておく理由としては、途中でreturn や exitなどが呼ばれた時に開放忘れがないようにするためです。
finallyはreturn する前に必ず呼ばれます。
最後に
いかがでしたでしょうか。
どのアプリケーションでも多重起動の禁止処理は必要な処理となります。
powershellスクリプトでも同様に、多重起動の禁止処理は入れておくと良いかと思います。