从使用runas打开的命令提示符或作为计划任务启动脚本时,Start-Process -wait不起作用

use*_*716 9 powershell scheduled-tasks wait start-process windows-server-2008-r2

我有一个脚本,我想作为一个预定的任务运行,但它没有做它应该做的事情.我正在尝试使用Start-Process和-Wait开关调用可执行文件,然后再继续.线是

Start-Process -FilePath"C:\ Pfx Engagement\Admin\Utilities\Backup Restore\BackupRestoreUtil.exe"-ArgumentList"/ f "$backup_directory"" - Wait

如果我从命令提示符调用它,即:

powershell.\ script.ps1

有用.它运行命令并在继续之前等待它完成.该命令完成后必须运行的脚本还有更多内容.问题是,当它是一个计划任务时,它不会等待.做一些基本的故障排除,我首先尝试使用名为"Scripts"的计划任务帐户打开带有runas的cmd窗口.所以我跑了

runas/env/user:脚本cmd

使用任务帐户打开命令提示符窗口.从那个命令提示符,我再次尝试"powershell.\ script.ps1",这一次,它不会等待.它运行命令并在命令完成之前立即继续运行.所以我认为这可能是"Scripts"帐户的一个问题,直到我用runas Administrator打开一个新的命令提示符

runas/env/user:Administrator cmd

当我从此管理员命令提示符调用脚本时,也会忽略-Wait开关,并且在调用脚本后立即移动脚本而不等待它完成.

关于这一点的奇怪之处在于,当我从管理员帐户从命令提示符调用它而不执行runas时,它可以工作.相同的帐户,两个不同的结果.关于这里到底发生了什么的任何想法,同样重要的是,如何解决它?

操作系统是Server 2008 R2,运行PowerShell 3.0

mjo*_*nor 8

不能告诉你它为什么这样做,但我认为这可能会解决它:

$proc = Start-Process -FilePath "C:\Pfx Engagement\Admin\Utilities\Backup Restore\BackupRestoreUtil.exe" -ArgumentList "/f "$backup_directory"" -Passthru
do {start-sleep -Milliseconds 500}
until ($proc.HasExited)
Run Code Online (Sandbox Code Playgroud)

-Passthru开关将使其返回进程的Process对象,您可以测试该进程以查看进程何时退出.

  • 顺便说一下 - 你可以使用$ proc.WaitForExit()代替开始睡眠.它仍然没有设置$ proc.ExitCode虽然)) (3认同)