0

我正在使用具有提升权限的另一个用户使用PowerShell启动一个进程。

$username = "username" 
$password = "password"
$startWithElevatedRights = "notepad"

$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
Start-Process powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process ‘,  $startWithElevatedRights, ‘ -Wait -verb runas}'

我知道将用户凭据写入代码是一种不好的风格,但它在全自动过程中使用,所以这是必要的。我的问题是,我不能等到进程(最后一行代码)完成。内部进程按预期等待。

我尝试了参数-Wait,* | 等待进程,* | Out-Null,返回值(始终为 null) 没有任何效果。

是否有任何解决方案等到进程退出?如果 PowerShell 2.0 有任何解决方案,那将是我用例的最佳选择。

4

1 回答 1

2

您可以使用参数获取Process对象,然后等待它退出Start-ProcessPassThru

$username = "username" 
$password = "password"
$startWithElevatedRights = "notepad"

$credentials = New-Object System.Management.Automation.PSCredential -ArgumentList @($username,(ConvertTo-SecureString -String $password -AsPlainText -Force))
$ps = Start-Process -PassThru -FilePath powershell -Credential $credentials -ArgumentList '-noprofile -command &{Start-Process ',  $startWithElevatedRights, ' -Wait -verb runas}'

$ps.WaitForExit()
于 2015-12-04T14:04:28.237 回答