PoorShell で排他ロックだなんて、もはや何かのビョーキかもしれない。
ロックファイルにはディレクトリを使用しているので Unix、Windows を問わず使えます。
(Linux 用の PowerShell もある。だけど使ったことないや → やってみたら使えた)
また、以前掲載した Python 用、PHP 用、十進 BASIC 用、Bash 用の排他ロックと連携することもできます。
商用/非商用を問わず、自由にコピーして使ってください。
最近、サーバにも SSD を使うことが増えてきました。
SSD のシステムではストレージに負荷をかけないよう、ロックファイルの保存先として
Linux では tmpfs を、Windows では RAM ディスクを使用してください。
exLock.ps1 文字コードは Shift-JIS です。
• Start-Sleep に -Seconds ではなく -Milliseconds を指定しているのはわざとです。
PowerShell 5.1 (Windows10/11 のデフォルト) では Start-Sleep -Seconds NN に小数を指定できません。(エラーにもならない)
Windows の PowerShell を最新の 7 にアップグレード(?)すれば指定できるけど、一般の Windows でそんなの見たことない。
使い方は、.\lock_tmp\ というディレクトリを作成したとして、こんな感じ
class を使っていますが、PoorShell にはデストラクタが無いため unlock() を明示する必要があります。
. .\exLock.ps1
$lockPath = ".\lock_tmp\lock.LK"
$lock = New-Object exLock($lockPath)
$isLock = $lock.lock()
if ($isLock -eq $true) {
# ロック中に実行する処理
}
$lock.unlock() # 必ず記述する