簡體   English   中英

在Windows 2012 R2中使用Powershell導入計划任務

[英]Importing Scheduled Tasks with Powershell in Windows 2012 R2

我對Powershell腳本非常陌生,但是嘗試修改我在這里找到的腳本,以便在Windows 2012 R2中使用Powershell導入一些XML計划任務。

我已成功使用此腳本將“計划任務”導入到根[Task Scheduler Library]中。

問題似乎是計划任務需要導入到任務計划程序庫下的子文件夾中,比如說“ SubTasks”

$task_path = "C:\Users\me\Desktop\ST Testing\exported ST's\scheduledTask.xml"
$task_user = "usr"
$task_pass = "pwd"

$schedule = new-object -com("Schedule.Service")
$schedule.Connect("server") # servername
#$folder = $schedule.GetFolder("\") <===This works fine
$folder = $schedule.GetFolder("\SubTasks") #<===This does not work
Write-Host $folder

Get-Item $task_path | % {
   $task_name = $_.Name.Replace('.xml', '')
   $task_xml = Get-Content $_.FullName
   $task = $schedule.NewTask($null)
   $task.XmlText = $task_xml
   $folder.RegisterTaskDefinition($task_name, $task, 6, $task_user, $task_pass, 1, $null)

}

當我運行上述Powershell腳本時,出現此錯誤:

帶有“ 7”參數的異常調用“ RegisterTaskDefinition”:“指定的路徑無效。(來自HRESULT的異常:0x800700A1)”在C:\\ Users \\ me \\ Desktop \\ ST Testing \\ ImportSTs.ps1:22 char:5 + $ folder.RegisterTaskDefinition($ task_name,$ task,6,$ task_user,$ task_pass,... + ~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 〜~~~ + CategoryInfo:未指定:(:) [],MethodInvocationException + FullyQualifiedErrorId:ComMethodTargetInvocation

提前致謝。

如果您使用的是Powershell 3(win2k12-如此)及以上版本,則有一個用於任務調度的完整模塊。

參見: gcm -Module PSScheduledJob

但是,它似乎沒有一種從xml導入任務的簡便方法。

有一些模塊可以使文件反序列化xml文件並測試所有設置,這似乎比下面列出的schtasks解決方案更麻煩。

對於powershell 2(win2k8),我發現使用schtasks更容易-完整的參考在這里:

https://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx

例如(從xmlfile安排任務,該任務將在特定的用戶信譽下運行:

schtasks /Create /XML $xmlfile /RU $creds.UserName /RP $creds.GetNetworkCredential().Password /TN "My Task Name"

我通過手動創建任務並導出到xml獲得了xml文件(我從xml中刪除了憑證和信息節點)

Register-ScheduledTask支持使用XML定義任務:

Register-ScheduledTask `
    -User $task_user `
    -Password $task_pass `
    -TaskName ([IO.Path]::GetFileNameWithoutExtension($task_path)) `
    -TaskPath '\SubTasks' `
    -Xml (Get-Content $task_path -Raw)

請注意,您需要獲取實際的XML 內容 -Raw標志可防止Get-Content返回String[] ,這也會使Register-ScheduledTask不滿意。

還要注意, Register-ScheduledTask具有-TaskPath參數,如果需要,您可以指定一個子文件夾將任務放入其中。

我不喜歡使用墳墓標記來繼續行,因此我更喜歡使用散布法將內容分布在多行上:

$taskArgs = @{
    User='usr';
    Password='pwd';
    TaskName=([IO.Path]::GetFileNameWithoutExtension($task_path));
    TaskPath='\SubTasks';
    Xml=(Get-Content $task_path -Raw)
}

Register-ScheduledTask @taskArgs

能夠使它滿足我們的需求。

$task_user="username"
$task_pass="password"
$schedule=new-object -ComObject ("Schedule.Service")
$schedule.Connect("server")
$folder=$schedule.GetFolder("\tasks")
$path="\\server\c$\temp\Tasks\"
Get-ChildItem $path -Filter "*.xml"| foreach {
$task_conf=Get-Item -Path $_.FullName
$taskname=$task_conf.Name
$task_xml=$task_conf.FullName
$task=$schedule.NewTask(0)
$task.XmlText=(Get-Content $task_xml).Replace('Task version="1.1" xmlns','Task version="1.2" xmlns')
$folder.RegisterTaskDefinition($taskname,$task,6,$task_user,$task_pass,1,$null)
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM