11

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

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

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

电源外壳 .\script.ps1

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

runas /env /user:脚本 cmd

使用任务帐户打开命令提示符窗口。在该命令提示符下,我再次尝试“powershell .\script.ps1”,这一次,它没有等待。它运行命令并在命令完成之前立即继续。所以我认为这可能是“脚本”帐户的问题,直到我用 runas 管理员打开一个新的命令提示符

runas /env /user:管理员 cmd

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

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

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

4

1 回答 1

10

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

$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)

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

于 2013-12-26T20:39:45.077 回答