「準備完了」状態のタスクを即時実行して、完了するまで待つPowerShell スクリプトを作ってみた。 「キューに挿入されました」状態も即時実行。「実行中」の場合は、完了するまで待つ。「無効」のときは何にもしない。タスクスケジューラ(taskschd.msc)でタスクを右クリックして「実行する」をクリックして、終わるまで待っているのと同じことをする。
使い方:
.\runtask.ps1 "タスク名" "タスクパス"
※タスクパスは(半角の)¥終わりで。ルートは"¥"
特定の条件設定がある場合に、キューに挿入状態にならないように、Schtasks /Run /I を使っているのがポイント。
[runtask.ps1]
------------------------------------------------------------------------------------
param($taskname,$taskpath)
#$taskname = ".NET Framework NGEN v4.0.30319 Critical"
#$taskpath = "\Microsoft\Windows\.NET Framework\"
$taskfullname = $taskpath+$taskname
$taskstate = (get-scheduledtask -taskname $taskname -taskpath $taskpath -ErrorAction SilentlyContinue).State
if ($taskstate -eq $null) {
Write-Host "Error : $taskname is not exist."
exit
}
if ($taskstate -eq "Disabled") {
Write-Host "$taskname is $taskstate : nothing to do."
} elseif ($taskstate -eq "Ready") {
Write-Host -NoNewLine "Start $taskname."
#Start-ScheduledTask -taskname $taskname -taskpath $taskpath
SCHTASKS /Run /I /TN $taskfullname
} elseif ($taskstate -eq "Running") {
Write-Host -NoNewLine "$taskname is already running."
} else {
SCHTASKS /Run /I /TN $taskfullname
Write-Host -NoNewLine "$taskname is already in progress."
}
while(1) {
$taskstate = (get-scheduledtask -taskname $taskname -taskpath $taskpath -ErrorAction SilentlyContinue).State
if ($taskstate -eq "Ready") {
Write-Host "Task completed. (Ready)"
break
} elseif ($taskstate -eq "Disabled") {
Write-Host "Task completed. (Disabled)"
break
} else {
Write-Host -NoNewLine "."
}
Start-Sleep -seconds 1
}
------------------------------------------------------------------------------------
ダウンロードはこちら、https://github.com/yamauchikazu/public
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。