クリスマス目前!商品レビューまとめ記事

Windowsのタスクスケジューラにおける一括エクスポート/インポートについて

ども。あいしんくいっと(@ithinkitnet)です。

Windowsで「ジョブの定期実行」を行う上で欠かせないのがタスクスケジューラになります。
タスクスケジューラはWindowsにおいて非常に重要な機能で、DropboxやGoogleといった各アプリケーションもたくさん利用しています。

windows10-taskschd-0
LinuxでいうCRONのようなもので、GUIで設定が出来るのでジョブ数が少ない分には非常に扱いやすいのですが、登録するジョブ数が多くなればなるほど、GUIでの操作が拷問みたいにキツクなってきます。

そもそも、繰り返し作業ってのはタスクスケジューラに限らずGUIと相性が良くないと思うんですよね〜。

というワケで、今回は「タスクスケジューラの一括エクスポートとインポート」についての方法を書いておきたいと思います。

Windowsのタスクスケジューラにおける一括エクスポート/インポートについて

もし、タスクスケジューラにた~くさん登録されたタスク群を他サーバに移行しなければならなくなったら・・・。
もう地獄ですし、もう考えたくはないですよね~。

新旧のタスクスケジューラ見比べながらGUIでポチポチ登録、でも良いんですけどね~。
時間があれば。
でも、タスクスケジューラに登録されたタスクの数が多ければ多いほど日が暮れそうだし、登録間違えそうだし。。。

そこで登場するのが、PowerShellスクリプトによる一括エクスポート/インポートになります。
フォルダ単位の一括エクスポート/インポートですけど、まぁ手でやるよりはマシって事で(笑)

※ 適当に作ったPowerShellスクリプトなので動作は保障しません。動かなかったらデバッグして下さいw

タスクスケジューラのエクスポート【一括】

タスクスケジューラの一括エクスポートは以下のようなPowerShellスクリプトを作ってやると良いと思います。


$outPath = "C:\Users\Administrator\Desktop\tasks"
$outtask = "\"
$outFileName = "{0}.xml"

$sch = New-Object -ComObject("Schedule.Service")
$sch.Connect("localhost")
$tasks = $sch.GetFolder("$outtask").GetTasks(0)
 
$outfile_temp = Join-Path $outPath $outFileName
 
$tasks | %{
$xml = $_.Xml
$task_name = $_.Name
$outfile = $outfile_temp -f $task_name
$xml | Out-File $outfile
}

上記のスクリプトだと、C:\Users\Administrator\Desktop\tasks以下にエクスポートデータが出力されます。
windows10-taskschd-1
参考 タスクスケジューラのジョブを纏めてエクスポートする

タスクスケジューラのインポート【一括】

上記でエクスポートしたファイルをタスクスケジューラへ一括で登録したい場合、
以下のようなPowerShellスクリプトを作ってやると良いと思います。


$XmlinPath = "C:\Users\Administrator\Desktop\tasks\"
$TaskinPath = "\hoge\" 

$tasks = Get-ChildItem  "$XmlinPath\*.xml" -name

foreach ($i in $tasks)
  {
    schtasks /create /XML $XmlinPath$i /TN "$TaskinPath$i".Replace(".xml","")
  }

上記のスクリプトを実行すると以下のようにタスクスケジューラの「hoge」フォルダに一括で登録されます。
edb65a1a-0fcc-4a3f-8c27-097f4070f71f
どうですか。
タスクスケジューラの登録って意外と面倒なので、作業効率アップ&ケアレスミスを防ぐといった意味でも、タスクのエクスポート/インポートは積極的に使っていく事をオススメします。

以上、あいしんくいっとでした( ̄O ̄;)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)