Home >
Windows にまつわる e.t.c.
指定パスのスケジュールタスクを XML エクスポートする
複数の(それも結構数がある)タスクスケジュールを XML エクスポートする必要があったので、PowerShell
で書いてみました。
インポートは書いていません m(__)m
単純に schtasks /Query /XML すると、OS
標準のタスクも対象になるので、パスを指定するようにしました。
例えば \MURA\
下にオリジナルのスケジュールをたくさん作っている場合に、このパス以下のタスクスケジュールだけをエクスポートできます。
Windows Server 2008 R2 がターゲットだったので、schtasks.exe を使っています。(Windows
Server 2012 R2 / 2016 でも問題無く動くはず)
##################################################################
# スケジュールタスクの XML Export
##################################################################
function ExportSchedule2XML(
$OutputBase, # XML 出力先 (ex. C:\SchduleExport )
$SelectPath # タスクパスの正規表現 (ex. ^\\Mura\\ )
){
# 全タスク情報取得
$AllTasksXML = schtasks /Query /XML
# 合致したタスクを格納する変数
$TaskPaths = @()
# 指定パスのタスクを収集
foreach( $Line in $AllTasksXML ){
# タスクパス抽出
if( $Line -match "<!-- (?<TaskPath>.*?) -->" ){
$TaskPath = $Matches.TaskPath
# 指定タスクパスと合致していたら追加
if( $TaskPath -match $SelectPath ){
$TaskPaths += $TaskPath
}
}
}
# 合致したタスクを XML に出力
foreach( $TaskPath in $TaskPaths ){
# タスクの XML 情報
$OutputXML = schtasks /Query /XML /TN $TaskPath
# 出力する XML ファイルのフルパス
$XMLPath = Join-Path $OutputBase $TaskPath
$XMLPath += ".xml"
# 出力先のフォルダが無かったら作成
[array]$PathParts = $XMLPath.Split("\")
$Index = $PathParts.Length
$TestPath = ""
for( $i = 0; $i -lt ($Index - 1) ; $i++ ){
$TestPath += $PathParts[$i]
$TestPath += "\"
if( -not (Test-Path $TestPath )){
# 出力先のフォルダが無かったので作成
md $TestPath
}
}
# XML 出力
Set-Content -Value $OutputXML -Path $XMLPath -Encoding Unicode
}
}
|
関連情報
関数を PowerShell プロンプトで実行する
http://www.vwnet.jp/Windows/PowerShell/2016100401/UseFunctionInPsPrompt.htm
Copyright © MURA
All rights reserved.