在Windows 2012 R2中使用Powershell导入计划任务
我对Powershell脚本非常陌生,但尝试修改了一个脚本,我发现该脚本用于在Windows 2012 R2中使用Powershell导入一些XML计划任务 我已成功地使用此脚本将计划任务导入根[Task Scheduler Library] 问题似乎是调度任务需要导入到任务调度程序库下的子文件夹中,比如说“子任务”在Windows 2012 R2中使用Powershell导入计划任务,windows,powershell,scheduled-tasks,Windows,Powershell,Scheduled Tasks,我对Powershell脚本非常陌生,但尝试修改了一个脚本,我发现该脚本用于在Windows 2012 R2中使用Powershell导入一些XML计划任务 我已成功地使用此脚本将计划任务导入根[Task Scheduler Library] 问题似乎是调度任务需要导入到任务调度程序库下的子文件夹中,比如说“子任务” $task\u path=“C:\Users\me\Desktop\ST Testing\exported ST's\scheduledTask.xml” $task\u user
$task\u path=“C:\Users\me\Desktop\ST Testing\exported ST's\scheduledTask.xml”
$task\u user=“usr”
$task\u pass=“pwd”
$schedule=新对象-com(“schedule.Service”)
$schedule.Connect(“服务器”)#服务器名
#$folder=$schedule.GetFolder(“\”)如果您使用的是powershell 3(win2k12-您也是)及以上版本,则有一个完整的任务调度模块
请参阅:gcm-模块PSScheduledJob
但是,从xml导入任务似乎不是一种简单的方法
其中有一些模块,反序列化xml文件并测试所有设置,似乎比下面列出的解决方案更麻烦
对于powershell 2(win2k8),我发现更容易使用schtasks
-full ref here:
例如(从xmlfile调度任务,任务将在特定的用户凭据下运行:
schtasks /Create /XML $xmlfile /RU $creds.UserName /RP $creds.GetNetworkCredential().Password /TN "My Task Name"
我通过手动创建任务并导出到xml(我从xml中删除了凭证和信息节点)获得了xml文件。能够满足我们的需要
$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)
}
支持使用XML定义任务:
注册ScheduledTask`
-用户$task\u用户`
-密码$task\u pass`
-TaskName([IO.Path]::GetFileName withoutextension($task\u Path))`
-任务路径“\subtask”`
-Xml(获取内容$task_路径-原始)
请注意,您需要获取实际的XML内容。-Raw
标志防止获取内容
返回字符串[]
,这也会使注册ScheduledTask
不满意
还请注意,Register ScheduledTask
有一个-TaskPath
参数,允许您指定一个子文件夹,以便在需要时将任务放入其中
我不喜欢使用grave标记来延续行,所以我更喜欢使用splatting来将内容分散到多行:
$taskArgs = @{
User='usr';
Password='pwd';
TaskName=([IO.Path]::GetFileNameWithoutExtension($task_path));
TaskPath='\SubTasks';
Xml=(Get-Content $task_path -Raw)
}
Register-ScheduledTask @taskArgs
路径是否存在?类似的要求,也必须支持ps v2,因此我选择使用schtasks
-我的解决方案:是的,如果您的意思是子任务[\subtask]文件夹是否存在。它已在任务计划程序中创建。感谢您的回复。
$taskArgs = @{
User='usr';
Password='pwd';
TaskName=([IO.Path]::GetFileNameWithoutExtension($task_path));
TaskPath='\SubTasks';
Xml=(Get-Content $task_path -Raw)
}
Register-ScheduledTask @taskArgs