在 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()
相关文章
在 Windows PowerShell 中获取命令行参数
发布时间:2024/03/04 浏览次数:358 分类:编程语言
-
本文将解释我们如何使用 PowerShell 的参数函数处理命令行参数,参数如何工作,我们如何使用 PowerShell 参数将值传递给参数,以及定义参数的基本方法是什么。
Windows PowerShell 中的 Base64 编码
发布时间:2024/03/04 浏览次数:332 分类:编程语言
-
本文将展示如何编码和解码 base64 字符串。Windows PowerShell 当前版本没有本机命令,因此我们将向你展示如何执行此操作的替代方法。
在 Windows PowerShell 中写入输出
发布时间:2024/03/04 浏览次数:259 分类:编程语言
-
本文将向你展示如何在 Windows PowerShell 中编写或打印输出。本文还将区分多个 write cmdlet 并解释它们的意义。
在 Windows PowerShell 中设置 PATH 环境变量
发布时间:2024/03/04 浏览次数:350 分类:编程语言
-
本文将展示在 Windows PowerShell 中设置路径环境变量的正确方法。本文还展示了如何在持久性和非持久性方法中设置变量。
在 Windows PowerShell 中打印环境变量
发布时间:2024/03/04 浏览次数:869 分类:编程语言
-
本文将讨论什么是环境变量以及如何使用多个 Windows PowerShell 命令打印它们。
在 PowerShell 中注释代码
发布时间:2024/03/04 浏览次数:363 分类:编程语言
-
本文将展示在 Windows PowerShell 中注释代码的多种方法。本文还介绍了注释代码时的一些最佳实践。
在 PowerShell 中执行 LDAP 查询
发布时间:2024/03/04 浏览次数:304 分类:编程语言
-
本文将深入了解如何使用 Active Directory 过滤器和 LDAP 过滤器。