我目前正在尝试使用 Powershell 连接到远程桌面,在该桌面上运行程序,然后注销。然后,我正在检查跨文件共享运行该命令的输出。基本上这意味着 PowerShell 在继续之前应该等待该过程完成。
阅读后,我一直在尝试使用 Start-Process -Wait 选项来确保它等待进程运行。但是,此脚本必须作为计划任务运行,并且似乎只要在用户未登录时运行脚本时,-wait 就不起作用,并且脚本会继续运行而不会完成该过程。我已经尝试了几种不同的等待选项,但显然我必须在用户注销时运行计划任务来测试它,并且测试会让人筋疲力尽。这是我当前执行此操作的代码行:
$proc = $(start-process $path -Wait)
请注意,我已尝试使用 -NoNewWindow 命令,但它在我的 PowerShell 版本中不可用。
有人对如何让它等待这个过程有任何其他想法吗?
最佳答案
您仍然拥有启动进程并等待他死亡的 .net 方式。看看Process类、方法和属性。
## Start a process
$Proc = [Diagnostics.Process]::Start("calc.exe")
## Start a processus with param
$Proc = [Diagnostics.Process]::Start("notepad.exe", "Fic.txt")
## Wait for a process death
$Proc.WaitForExit()
还可以配置启动环境
$credential = Get-Credential
$startInfo = New-Object Diagnostics.ProcessStartInfo
$startInfo.UserName = $credential.Username
$startInfo.Password = $credential.Password
$startInfo.Filename = "powershell"
## Start a process with StartInfo
$startInfo.UseShellExecute = $false
$Proc = [Diagnostics.Process]::Start($startInfo)
## Stop the process
$Proc.Kill()
关于用户注销时,PowerShell 1.0 Start-Process 未等待完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18706653/