[Tips]一定時間経過後にスクリプトを実行する

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

コメント

タイトルとURLをコピーしました