[英]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.