PowerShellで一定時間経過した後にスクリプトを実行させたくて、下記のような関数を作ってみました。
function Execute-Script([int]$Time, [ScriptBlock]$ScriptBlock, [String]$ComputerName = ".") { [System.Threading.Thread]::Sleep($Time) Invoke-Command -ComputerName $ComputerName -ScriptBlock $ScriptBlock }
この関数を使用する際の書式は
Execute-Script スクリプトを実行させるまでの待機時間(mSec), 実行させるスクリプト, [スクリプトを実行するリモートコンピュータ名]
です。
[スクリプトを実行するリモートコンピュータ名]は省略可能で、省略した場合にはローカルコンピュータでスクリプトを実行します。
関数の中身ですが、一定時間待機するのにSleepメソッドを使用しています。
Sleepメソッドの引数には、待機する時間を単位:mSecで指定します。1秒なら1000ということです。
そしてスクリプトの実行はInvoke-Commandを使用しています。このコマンドレットにより、リモートコンピュータ上でもスクリプトを実行させることが可能です。
Invoke-Commandの使い方はWindows PowerShell によるリモート制御 ~その3 永続的なセッション編 ~ を参照ください。
実際の使用例を下記に示します。これは3秒経過したらローカルコンピューター上でGet-Dateコマンドレットを実行します。
PS> Execute-Script 3000 {Get-Date}
次のコマンドは、3秒後にリモートコンピューターMyServ01でGet-Dateコマンドレットを実行します。
PS> Execute-Script 3000 {Get-Date} MyServ01
コメント