ZetCode

PowerShell -NoNewWindow 参数

最后修改:2025 年 2 月 15 日

本教程涵盖 PowerShell 的 -NoNewWindow 参数。它解释了如何在当前控制台窗口中运行进程。该参数与几个与进程相关的 cmdlet 一起使用。示例展示了该参数的实际应用。

理解 -NoNewWindow

-NoNewWindow 参数可防止 PowerShell 在启动进程时打开新窗口。默认情况下,某些 cmdlet 会在新窗口中启动进程。此参数将进程输出保留在当前控制台中。它对于脚本编写和输出捕获很有用。

与 Start-Process 的基本用法

-NoNewWindow 最常见的用法是与 Start-Process 一起使用。没有它,Start-Process 会为应用程序打开一个新窗口。使用它时,进程会在当前控制台窗口中运行。此示例在当前窗口中启动记事本。

nonewwindow1.ps1
Start-Process notepad -NoNewWindow

此命令在不创建新窗口的情况下启动记事本。输出出现在当前的 PowerShell 控制台中。请注意,像记事本这样的 GUI 应用程序仍可能创建自己的窗口。

运行命令行工具

命令行工具特别适合与 -NoNewWindow 一起使用。它们的输出直接显示在 PowerShell 控制台中。此示例运行 ipconfig 命令。网络配置输出立即显示。

nonewwindow2.ps1
Start-Process ipconfig -NoNewWindow -Wait

-Wait 参数可确保 PowerShell 等待完成。没有它,命令将异步运行。输出会出现在当前的控制台窗口中。

使用 -NoNewWindow 捕获输出

-NoNewWindow 与重定向结合使用可以捕获输出。此示例运行 ping 并将结果保存到文件。命令在当前控制台中运行,但输出会进入文件。

nonewwindow3.ps1
Start-Process ping -ArgumentList "google.com" -NoNewWindow -Wait -RedirectStandardOutput ping_results.txt

ping 命令的输出已保存到 ping_results.txt。没有 -NoNewWindow,这会创建一个单独的窗口。-RedirectStandardOutput 参数处理文件输出。

运行 PowerShell 脚本

您可以使用 -NoNewWindow 来运行 PowerShell 脚本。这会将所有输出保留在当前的控制台会话中。示例在不产生新窗口的情况下运行另一个脚本。这可以维护一个更干净的工作区。

nonewwindow4.ps1
Start-Process powershell -ArgumentList "-File C:\scripts\test.ps1" -NoNewWindow -Wait

脚本 test.ps1 在当前控制台窗口中运行。其所有输出都出现在与父脚本相同的窗口中。-Wait 确保顺序执行。

与 -PassThru 结合使用

-PassThru 参数会返回进程对象。与 -NoNewWindow 结合使用时,它可以实现进程管理。此示例启动一个进程并存储其对象。然后可以使用该对象来监视或停止进程。

nonewwindow5.ps1
$process = Start-Process notepad -NoNewWindow -PassThru
$process | Get-Process

进程对象存储在 $process 中。第二行显示了有关该对象的信息。此技术对于进程自动化脚本非常有效。

运行隐藏的进程

-NoNewWindow 可以与 -WindowStyle Hidden 结合使用。这会在没有任何可见窗口的情况下运行进程。该示例启动了一个后台 PowerShell 命令。该命令在没有任何 UI 的情况下执行。

nonewwindow6.ps1
Start-Process powershell -ArgumentList "-Command Get-Date" -NoNewWindow -WindowStyle Hidden

Get-Date 命令完全隐藏运行。执行期间不会出现控制台窗口。这对于后台任务和计划作业很有用。

与 Invoke-Command 结合使用

-NoNewWindow 也适用于 Invoke-Command 进行远程会话。这会将远程命令的输出保留在本地控制台中。该示例在远程计算机上运行一个命令。结果出现在当前窗口中。

nonewwindow7.ps1
Invoke-Command -ComputerName Server01 -ScriptBlock { Get-Process } -NoNewWindow

远程 Get-Process 的输出显示在本地。没有 -NoNewWindow,这可能会打开单独的窗口。该参数可确保更清晰的远程管理体验。

使用 -NoNewWindow 进行错误处理

在使用 -NoNewWindow 时可以捕获错误流。此示例演示了错误重定向。该命令尝试访问一个不存在的文件。错误被重定向到一个日志文件。

nonewwindow8.ps1
Start-Process powershell -ArgumentList "-Command Get-Content nofile.txt" -NoNewWindow -Wait -RedirectStandardError errors.log

错误消息已保存到 errors.log。控制台不显示任何错误输出。此技术对于记录和调试脚本很有用。

来源

PowerShell 文档

本教程涵盖了 PowerShell 的 -NoNewWindow 参数。示例展示了各种实际应用。该参数对于基于控制台的进程管理非常有用。

作者

我叫 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。至今,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PowerShell 教程