由PSExec触发的Windows powershell脚本在完成运行时不会终止Powershell进程

时间:2010-10-22 20:18:05

标签: powershell automation scheduled-tasks

我需要在需要提升权限的几台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

提前感谢任何见解。

1 个答案:

答案 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
}