更新任务计划程序条目以修改任务参数

问题描述 投票:0回答:1

我正在尝试迭代许多任务调度程序条目来修改任务参数。我们有许多服务器同时运行启动的脚本,如果某个进程需要关注,所有服务器都需要在控制台上访问。

理想的是使用 start /min 或 powershell -window minimized 启动最小化

我正在测试一项示例任务。到目前为止我的代码看起来像

$PREFIX = "-window minimized"
$taskPath = "\somepath\"
GetScheduledTask -CimSession "servername" -TaskPath $taskPath -TaskName "mytask" | ForEach-Object {

  $actions = $_.Actions
  $actions New-ScheduledTaskAction -Execute "powershell" -Argument "{PREFIX} ${actions}"
  Set-ScheduledTask -CimSession "servername" -TaskPath $taskPath -TaskName $_.TaskName -Action $actions
}

除了我无法获取旧的命令参数之外,这有效。我总是得到带有前缀的新参数,然后是“MSFT_TaskExecAction”。此方法针对多步骤任务,导致之后仅执行一个错误步骤(以及 MSFT_TaskExecAction)。谢谢大家。

windows powershell task action scheduler
1个回答
0
投票

Actions
属性包含操作实例列表 - 不仅仅是它们的参数 - 为此,您需要在其中包含的操作之一上使用
Arguments
属性:

$actions = $_.Actions |ForEach-Object {
  if ($_.Execute -match 'powershell') {
    # a powershell task, let's create a new one with the prefix
    $newTaskActionArgs = @{ Execute = 'powershell'; Arguments = "${PREFIX} $($_.Arguments)" }
    if ($_.WorkingDirectory) { 
      # make sure to copy the initial working directory if set too
      $newTaskActionArgs['WorkingDirectory'] = $_.WorkingDirectory
    }
    New-ScheduledTaskAction @newTaskActionArgs
  }
  else {
    # leave action as-is
    $_
  }
}

Set-ScheduledTask ... -Action $actions
© www.soinside.com 2019 - 2024. All rights reserved.