【问题标题】:Powershell allow canceling of a start-process -waitPowershell 允许取消启动进程 -wait
【发布时间】:2019-08-22 02:42:44
【问题描述】:

我需要暂停一个 powershell 脚本,直到它启动的进程完成。太好了,我可以使用Start-Process xxxx -wait 但是在某些情况下,我需要能够在不等待的情况下继续执行脚本,并且在开始进程之前我无法做出此决定。

最好我什至可以在这里杀死启动的进程,但是有没有办法启动一个进程,然后监听输入键或“继续”,这将停止进程并让 powershell 脚本继续运行,否则只是等待进程完成并退出以继续执行脚本?

我已经研究了几个小时的 powershell 文档,但我很难找到最能解决我的问题的命令。

此外,理想情况下,这将是 powershell 7(核心)跨平台兼容。

【问题讨论】:

  • $p = Start-Process -Passthru 然后循环调用$p. WaitForExit(2000) ,查看图书结果。如果需要终止进程调用$p. Kill()
  • 谢谢,这听起来确实像我要找的东西,但如果我要接受输入可能会杀死它,这不会阻止循环再次运行吗?
  • 使用 [Console::KeyAvailable] 和循环我可以检查它。但是使用 start-process 输入在进程退出之前不会返回到我的 powershell 窗口。我不得不使用 -NoNewWindow 来保留输入,但它似乎确实有效

标签: powershell powershell-core


【解决方案1】:

这不能保证每个人都可以,但它适用于我的情况

Write-Host "  Waiting on synrchonize..."
$process = Start-Process "java" -NoNewWindow -argumentlist "-jar myjar.jar" -PassThru
Write-Host "  Press any key to skip wait"
while(!([Console]::KeyAvailable -or ($process.HasExited)))
{
    [Threading.Thread]::Sleep( 100 )
}

if(!$process.HasExited){
    Write-Host "...skipped"
    $process.Kill()
} else {
    Write-Host "...waited!"
}

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 2011-10-31
    • 2023-03-27
    • 1970-01-01
    • 2023-01-16
    • 2011-04-27
    • 1970-01-01
    • 2015-10-11
    • 2013-08-02
    相关资源
    最近更新 更多