我正在尝试迭代许多任务调度程序条目来修改任务参数。我们有许多服务器同时运行启动的脚本,如果某个进程需要关注,所有服务器都需要在控制台上访问。
理想的是使用 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)。谢谢大家。
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