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

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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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