在 PowerShell 中等待每个命令完成
通常,Windows PowerShell 在启动以下命令之前会等待内部命令。
此规则的一个例外是基于外部 Windows 子系统的 EXE。此外,Windows PowerShell 在运行可执行程序时不会等待命令完成。
本文将向你展示如何强制 Windows PowerShell 环境等待带有可执行文件的命令完成,然后再转到以下命令。
在 PowerShell 中使用 Out
命令等待每个命令完成
如前所述,运行可执行文件不会等待命令完成,而是直接转到以下命令。我们可能需要避免这种情况,特别是如果我们创建一个应该顺序运行应用程序的脚本。
一个绝妙的技巧是使用 Out
命令之一,例如 Out-Null
。运行应用程序时,通过管道传送 Out-Null
cmdlet 将诱使 Windows PowerShell 在正在运行的应用程序之上运行底层 cmdlet。
请记住,cmdlet Out-Null
不会在控制台中显示任何内容,因此它看起来像是一个标准运行的应用程序。唯一的区别是它等待整个命令行执行。
示例代码:
Notepad.exe | Out-Null
我们可以使用的其他 Out
命令示例如下:
Out-Default
- 将输出发送到默认格式环境和默认输出 cmdlet。Out-File
- 将输出发送到文件。Out-GridView
- 将输出发送到单独窗口中的交互式表格。Out-Host
- 将输出发送到命令行。Out-Printer
- 将输出发送到打印机。Out-String
- 将对象作为一系列字符串发送到主机。
在 PowerShell 中使用 Start-Process
Cmdlet 等待每个命令完成
使 Windows PowerShell 等待命令行完成的另一种方法是 Start-Process
cmdlet。
例如,我们可以使用 Start-Process
cmdlet 的 -Wait
参数,Windows PowerShell 将等待进程完成,然后再执行以下命令行。
Start-Process notepad.exe -NoNewWindow -Wait
使用 PowerShell 社区扩展版本,首先创建一个新对象。一旦创建了对象,就会调用 WaitForExit()
函数。
$proc = Start-Process notepad.exe -NoNewWindow -PassThru
$proc.WaitForExit()
在 PowerShell 中使用后台作业等待每个命令完成
使 Windows PowerShell 等待命令行完成的另一种方法是使用后台作业。
后台作业是在本地机器的单独进程中运行的一个命令或一组命令。后台作业的示例语法如下所示。
$job = Start-Job { notepad.exe }
Wait-Job $job
Receive-Job $job
调用 Wait-Job
cmdlet 将使进程等待,直到在命令行中调用 Receive-Job
。
在 PowerShell 中使用 Wait-Process
Cmdlet 等待每个命令完成
使 Windows PowerShell 等待命令行完成的另一种方法是 Wait-Process
cmdlet。
就像我们的第一个示例一样,我们可以将其通过管道传输到我们的可执行文件中并等待命令行完成。但是,使用此 cmdlet 仅适用于 Windows PowerShell 版本 5.1 及更低版本,不适用于最新的 PowerShell (Core) 7。
Notepad.exe | Wait-Process
在 PowerShell 中使用 [Diagnostics.Process]
类等待每个命令完成
如果你的系统中安装了 .NET
库,你可以使用 [Diagnostics.Process]
类等待进程完成,然后再转到以下命令行。
但是,我们不建议使用它,因为 Windows PowerShell 中提供了其他更简单的 cmdlet,我们可以充分利用它们。如果 PowerShell 命令不可用,请仅使用 .NET
库。
[Diagnostics.Process]::Start('notepad.exe').WaitForExit()
相关文章
在 PowerShell 中运行带参数的 exe 文件
发布时间:2024/03/03 浏览次数:160 分类:编程语言
-
在本文中,我们只关注带参数运行 exe 文件的方式,因为如果它已经在 Windows PATH 中,则正常的 exe 文件执行(不带参数)非常简单。
在 PowerShell 中运行 CMD 命令
发布时间:2024/03/03 浏览次数:69 分类:编程语言
-
本文介绍了在 Windows PowerShell 脚本环境中的 PowerShell 中运行 cmd 旧命令的不同方法。
在 PowerShell 中向多个收件人发送电子邮件
发布时间:2024/03/03 浏览次数:95 分类:编程语言
-
本文将演示使用 PowerShell 编写和使用哪些命令向多个收件人发送电子邮件。
在 PowerShell 中显示消息框
发布时间:2024/03/03 浏览次数:103 分类:编程语言
-
本文将讨论名为 Message Boxes 的 PowerShell GUI 的重要功能,我们将学习如何使用 PowerShell 编写和输出它们。
在 PowerShell 中输出信息性消息
发布时间:2024/03/03 浏览次数:74 分类:编程语言
-
本文将区分多个写入命令,例如写入信息、警告和错误消息,并提供我们可以在 PowerShell 中何时何地使用它们的情况。