我正在使用一些发布自动化脚本,使用Powershell来更新执行各种应用程序的现有计划任务。 在我的脚本中,我可以设置应用程序的path和工作目录,但似乎没有将更改保存回任务。
function CreateOrUpdateTaskRunner { param ( [Parameter(Mandatory = $TRUE, Position = 1)][string]$PackageName, [Parameter(Mandatory = $TRUE, Position = 2)][Version]$Version, [Parameter(Mandatory = $TRUE, Position = 3)][string]$ReleaseDirectory ) $taskScheduler = New-Object -ComObject Schedule.Service $taskScheduler.Connect("localhost") $taskFolder = $taskScheduler.GetFolder('\') foreach ($task in $taskFolder.GetTasks(0)) { # Check each action to see if it references the current package foreach ($action in $task.Definition.Actions) { # Ignore actions that do not execute code (eg send email, show message) if ($action.Type -ne 0) { continue } # Ignore actions that do not execute the specified task runner if ($action.WorkingDirectory -NotMatch $application) { continue } # Find the executable $path = Join-Path $ReleaseDirectory -ChildPath $application | Join-Path -ChildPath $Version $exe = Get-ChildItem $path -Filter "*.exe" | Select -First 1 # Update the action with the new working directory and executable $action.WorkingDirectory = $exe.DirectoryName $action.Path = $exe.FullName } } }
到目前为止,我无法在文档中find明显的Save函数( https://msdn.microsoft.com/en-us/library/windows/desktop/aa383607(v=vs.85).aspx )。 我在这里采取了错误的方法,需要解决任务XML吗?
RegisterTask方法有一个你会使用的更新标志。 像这样的东西:
# Update the action with the new working directory and executable $action.WorkingDirectory = $exe.DirectoryName $action.Path = $exe.FullName #Update Task $taskFolder.RegisterTask($task.Name, $task.Definition, 4, "<username>", "<password>", 1, $null)
有关每个参数的详细信息,请参阅msdn文章。