在Windows 2012 R2中使用Powershell导入计划任务

时间:2015-04-30 21:29:46

标签: windows powershell scheduled-tasks

我是Powershell脚本编写的新手,但是我试图修改我发现here的脚本,以便在Windows 2012 R2中使用Powershell导入一些XML计划任务。

我已成功使用此脚本将计划任务导入根[任务计划程序库]。

问题似乎是需要将Schedule Tasks导入到任务计划程序库下的子文件夹中,让我们说" 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脚本时,我收到了这个错误:

  

异常调用&#34; RegisterTaskDefinition&#34;用&#34; 7&#34;参数:&#34; The   指定的路径无效。 (HRESULT异常:0x800700A1)&#34;   在C:\ Users \ me \ Desktop \ ST Testing \ ImportSTs.ps1:22 char:5   + $ folder.RegisterTaskDefinition($ task_name,$ task,6,$ task_user,   $ task_pass,...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~   ~~~       + CategoryInfo:NotSpecified:(:) [],MethodInvocationException       + FullyQualifiedErrorId:ComMethodTargetInvocation

提前致谢。

2 个答案:

答案 0 :(得分:1)

Register-ScheduledTask支持使用XML定义任务:

  ngOnInit() {

    // This is placed here in the in after view init is because it will throw exception as view will be change at that time
    this.suggestions
      .map((value, index) => {
        this.suggestions[index].newSuggestion = value.descriptionSuggestion;
      });
  }

  ngAfterViewInit() {
    if (this.suggestions && this.suggestions.length > 0) {
      this.suggestions
        .map((value, index) => {
          this.elementRef.nativeElement.querySelector('.class' + index).style.display = 'none';
        });
    }
  }

请注意,您需要获取实际的XML 内容Register-ScheduledTask ` -User $task_user ` -Password $task_pass ` -TaskName ([IO.Path]::GetFileNameWithoutExtension($task_path)) ` -TaskPath '\SubTasks' ` -Xml (Get-Content $task_path -Raw) 标志可防止-Raw返回Get-Content,这也使String[]感到不高兴。

还要注意,Register-ScheduledTask有一个Register-ScheduledTask参数,如果需要,您可以指定一个子文件夹来放置任务。

我不喜欢使用坟墓标记来延续行,所以我更喜欢使用散布法将内容分布在多行上:

-TaskPath

答案 1 :(得分:0)

能够满足我们的需求。

$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)
}