社内SEの徒然なる日記

powerShellで無限ループと待機処理

■ 状況

あるフォルダにファイルが保存された時に、そのファイルに対して何らかの処理を実行する。

ファイルが保存されるのは、7:00 〜 0:00 の間に不定期に保存される。処理を実行するサーバーは、6:30に再起動するが、それ以外の時間帯は常に稼働している。

という条件で動作する処理を作る必要が生じました。さて、どうしようか?

■ サンプル

特別な環境を用意する程のこともないので、powerShellで実現してみようと思います。
必要な処理は、無限ループと待機処理ですかね。
# 無限ループです。
# 強制終了されるまで、永遠に処理を繰り返します。

while(1) {

# メッセージを表示します。
Write-Output ('日時:' + (Get-Date -format yyyyMMdd_HHmmss))

# 30秒待機します。
Start-Sleep -Seconds 30
}


※ メインの処理は後で作るとして、ここでは代わりにWrite-Outputを実行させておきます。

■ 解説

1.無限ループ

無限ループは、while文で実現します。
while文は、条件が真(True)である間は処理を繰り返します。

そして、powerShellでは0は偽(False)を表し、0以外は真(True)を表します。
なので、サンプルのように条件に1を指定すると、真(True)ということになり、無限ループが実現できます。
これは、C言語あたりと同じ仕様ですかね。

ちなみに、「 while($True) 」というように、boolean値を直接指定しても動きます。

2.待機処理

連続実行させるのも良くないので、30秒のインターバルを置いて処理を実行します。
powerShellの待機処理は、Start-Sleepコマンドレットで実現できます。

オプション -Seconds で待機する秒数を指定できます。

■ 実行

実行結果は、下記のようになりました。
ログの時間を見る限り、30秒の待機処理が機能していることが分りますね。

waitShellの実行画面

投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する