我需要在需要提升权限的几台Windows 2008服务器上完成一系列任务,因此我必须创建一系列我通过psexec运行的计划任务。由于它们必须按顺序运行,因此我找到并修改了一个powershell脚本,该脚本“停止”直到在远程计算机上完成计划任务。我遇到的问题是,当我在远程计算机上使用psexec启动脚本时,一旦它完成运行(由控制台输出中的消息指示),PowerShell.exe不会干净地退出,而是挂起并保持整个处理。在延迟脚本退出后我需要powershell才能退出,但即使最后使用exit关键字,它也会保留在内存中并阻止进程完成。我对powershell并不是非常有经验所以我会附上我的脚本,以防万一我做了一些愚蠢的事情:
while($true) {
$status = schtasks /query /tn "AutoDeploy"| select-string -patt "AutoDeploy"
if($status.tostring().substring(64,7) -eq "Running") { "Waiting for task to complete..." } else { break }
start-sleep -s 5
}
"Task complete."
exit
提前感谢任何见解。
答案 0 :(得分:1)
这适用于我(使用不同的任务名称)并且不会挂起psexec:
$taskName = "AutoDeploy"
while (1)
{
$stat = schtasks /query /tn $taskName |
Select-String "$taskName.*?\s(\w+)\s*$" |
Foreach {$_.Matches[0].Groups[1].value}
if ($stat -ne 'Running')
{
"Task completed"
break
}
"Waiting for task to complete"
Start-Sleep 5
}