gpt4 book ai didi

powershell - 如何在不中断脚本本身的情况下中断脚本内部调用的可执行文件?

转载 作者:行者123 更新时间:2023-12-02 23:12:13 30 4
gpt4 key购买 nike

假设您将以下脚本保存在文件outermost.ps1中:

powershell.exe -Command "while ( 1 -eq 1 ) {} "
echo "Done"

运行 outermost.ps1时,只能通过按Ctrl + C中止此操作,并且不会将任何输出写入控制台。如何修改它,以使最外面的脚本继续运行并在按Ctrl + C时执行 echo "Done"

这是真实情况的简化版本,其中内部脚本实际上是可执行文件,只能通过按Ctrl + C才能停止。

编辑:脚本也可以是:
everlooping.exe
echo "Done"

但我想提供一个示例,让每个人都可以“在家尝试”将其复制粘贴到编辑器中。

最佳答案

job形式启动无限命令/语句,使PowerShell脚本进程Ctrl + C作为常规输入(请参阅here),并在收到该输入时停止作业:

[Console]::TreatControlCAsInput = $true

$job = Start-Job -ScriptBlock {
powershell.exe -Command "while ( 1 -eq 1 ) {} "
}

while ($true) {
if ([Console]::KeyAvailable) {
$key = [Console]::ReadKey($true)
if (($key.Modifiers -band [ConsoleModifiers]::Control) -and $key.Key -eq 'c') {
$job.StopJob()
break
}
}
Start-Sleep -Milliseconds 100
}

Receive-Job -Id $job.Id
Remove-Job -Id $job.Id

echo "Done"

如果需要在运行时从作业中检索输出,则可以在 else分支的外部 if语句中进行以下操作:
if ($job.HasMoreData) { Receive-Job -Id $job.Id }

关于powershell - 如何在不中断脚本本身的情况下中断脚本内部调用的可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34611011/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com