【ツールの概要】
・Powershellで、Windowsタスクスケジューラの特定タスクの、「状態」を確認するスクリプトです。
【環境(使っている環境)】
・Windows Server2016
・Powershell ver5.1
【ソース(pingcheck.ps1)】
# ログFunction function logwrite($MSG, $INFO, $outputfile) { $NOW = Get-Date -Format G Write-Output "[ $NOW ][ $MSG ] $INFO" | Out-File -Append $outputfile -encoding Default } # メールFunction事前読込(別にここじゃなくても可) .('D:\bin\SendmailbyPS.ps1') # プロセスメイン $TaskName = '~~~~'; ←タスクの名前を入れる $logfile = 'D:\log\TaskCheck_' + (Get-Date -Format "yyyyMMdd") + '.log'; $mailcfgpath = "D:\etc\mailcfg.xml" logwrite "INF" "Check Start" $logfile # タスクの状態を取得 $State = (Get-ScheduledTask -TaskName $TaskName).State # タスクの状態で条件分岐(Running以外だったらログ書いてメールを送る、失敗したらログ書き込みのみ、Runningだったらログ書き込みのみ) if ($State -ne "Running") { try { # Mail sending. logwrite "INF" "Task is not Running : $($State)" $logfile # メール送信部分 $NOW = Get-Date -Format G $Subject = "[Warning] Server [" + (hostname) + "]'s Task [$($TaskName)] is not Running." $Body = "Task [$($TaskName)] is not Runnning : State is $($State). $($NOW)" $To = "メールアドレス@sample.jp" $Cc = "メールアドレス@sample.jp" SendmailbyPS $To $Cc $Subject $Body $mailcfgpath logwrite "INF" "Sending Mail Finished : $($TaskName)" $logfile } catch { logwrite "ERR" "Error. SendMailFunction Failed. TaskName : $($TaskName)" $logfile $errstring = $error[0] | Out-String logwrite "ERR" "$errstring" $logfile } } else { logwrite "INF" "The Task is $($State)" $logfile } logwrite "INF" "Check Finished" $logfile
【使用方法】
・上記のスクリプトの$TaskName に、確認対象のタスクの名前を代入するよう記述します。
・メール送信スクリプト(SendmailbyPS.ps1)とその設定ファイル(mailcfg.xml)を引数に注意しながら作ります。
・powershellで実行します。
【説明】
・Get-ScheduledTaskコマンドで、Statusを直で取れます。実行中はRunningですね。他は以下の通り。
Running | 実行中 |
Ready | 準備完了 |
Disabled | 無効 |
【総評】
ズバリのタスク名がわかっている場合、非常に簡単に状態などが取れます。
他の設定値がとりたい場合などは参考サイトを参照ください!
【参考サイト】
Get-ScheduledTask (ScheduledTasks) | Microsoft Docs
PowerShell で スケジューラタスク(SchedulerTask) を操作する - tech.guitarrapc.cóm