Help us understand the problem. What is going on with this article?

powershellでWindowsタスクスケジューラのタスクを複数サーバから一括エクスポートする

More than 3 years have passed since last update.

Windowsのタスクスケジューラをガリガリ運用していて、タスクを日次で定期的にバックアップしたいという要件があったのでやってみた。

Powershell2.0でも動くのが嬉しい(4.0とか使うと素敵なコマンドレットで操作出来そう!!)

経緯

GUIからだと全件選んでエクスポートとかは出来るけど、まさか毎日やるわけないし、昔からお馴染みのschtasksだと、タスク名を引数で渡してからのxml出力は出来るけど(これまではサーバリプレイスの時はこれをbatで組んでやってた)、毎回タスク名取ってきてコマンド生成するの辛いなとか思ってたさなか、同僚の一声でpowershellで簡単に出来そうってなったのでやってみた。

今回は、スタンバイ機からリモート経由でタスクを取得してくるという構成。

あんまpowerShell詳しくないけど、最近のpowershellだと、タスクスケジューラをいじくる用のコマンドレットも出てるみたいだけど、今回は、バージョンが最新でなかったのでComObject(Schedule.Service)に接続する方法で実現した。

今までbatでかなり辛い運用していたので、自分的には革命的だった!!

サンプルコード

  • srvListに入れたサーバ名毎に、フォルダを掘って登録タスク数分xmlファイルを出力
  • リストアは、batでやるもよし、GUIでやるも良し(xmlファイルさえ手元にあればOK)
task_export.ps1
#出力先パス
$outPath = "D:\work\nagai\pstest"

#対象サーバ名を配列で
$srvList = "サーバ名1","サーバ名2"

$outtask = "\"
$outFileName = "{0}.xml"
$sch = New-Object -ComObject("Schedule.Service")

foreach($srvName in $srvList){

  $sch.Connect("$srvName")
  $tasks = $sch.GetFolder("$outtask").GetTasks(0)
  $outfile_temp = Join-Path $outPath -ChildPath $srvName | join-Path -ChildPath $outFileName

  $tasks | ForEach-Object{
    $outfile = $outfile_temp -f $_.name
    $_.xml | Out-File $outfile
  }
}

ps1スクリプトをタスクスケジューラにセット

ついでに、タスクスケジューラにpowershellをセットする際の「操作」タブの設定方法も

操作: プログラムの開始
プログラム/スクリプト: %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加: -Command ".\TaskExport.ps1"
開始: ps1を配置しているフォルダ

参考

https://gallery.technet.microsoft.com/scriptcenter/5af6451b-2e65-4349-bf9f-71e966a25a6f
http://mtgpowershell.blogspot.jp/2013/11/blog-post.html

connehito
コネヒト株式会社は、「あなたの家族像を実現する社会をつくる」をビジョンに掲げる、現代社会における多様な家族像の実現を目指す会社。女性向けの「ママリ」「ママRework」や家族の購買の意思決定を支える「ママリ口コミ大賞」、男性育休冊子などを展開。
https://connehito.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away