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

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.