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