ZetCode

PowerShell Start-Process

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍PowerShell中的Start-Process cmdlet。此cmdlet在本地计算机上启动一个或多个进程。它提供了对进程启动方式的广泛控制。

进程基础

Start-Process cmdlet使用各种选项启动新进程。它可以运行可执行文件、脚本或具有关联应用程序的文档。与直接调用可执行文件不同,它提供了更强的执行控制。参数允许设置窗口样式、凭据和工作目录。

Start-Process 的基本用法

使用Start-Process的最简单方法是仅提供文件名。这将启动文件类型的默认应用程序。对于可执行文件,它会直接启动程序。进程独立于PowerShell运行。

start1.ps1
Start-Process notepad.exe

此命令启动记事本。进程在一个单独的窗口中运行。PowerShell会立即继续,而不会等待记事本关闭。

使用参数启动进程

许多应用程序接受命令行参数。-ArgumentList参数将这些参数传递给新进程。参数应作为数组提供。这对于在启动时配置应用程序行为很有用。

start2.ps1
Start-Process notepad.exe -ArgumentList "C:\temp\notes.txt"

此命令以特定文件打开记事本。如果文件不存在,记事本会提供创建它的选项。文件路径必须正确引用。

以不同用户身份运行进程

可以使用-Credential参数以不同的凭据启动进程。这需要一个包含用户名和密码的PSCredential对象。用于以提升的权限运行进程。用户必须拥有适当的权限。

start3.ps1
$cred = Get-Credential
Start-Process cmd.exe -Credential $cred

这将提示输入凭据,然后以该用户身份启动命令提示符。Get-Credential cmdlet会显示一个安全的凭据对话框。密码输入是安全的。

控制窗口样式

-WindowStyle 参数控制进程窗口的外观。选项包括Normal、Minimized、Maximized和Hidden。对于后台进程或脚本很有用。默认是Normal窗口状态。

start4.ps1
Start-Process notepad.exe -WindowStyle Minimized

此命令将记事本最小化到任务栏。窗口最初不可见,但会出现在任务栏中。对于后台应用程序很有用。

等待进程完成

-Wait 参数使PowerShell等到进程完成。在依赖进程完成的脚本中很有用。没有它,PowerShell会立即继续。与-PassThru结合使用以获取进程信息。

start5.ps1
Start-Process notepad.exe -Wait
Write-Host "Notepad has closed"

PowerShell会等到记事本关闭后再继续。消息仅在记事本退出后显示。对于顺序操作很有用。

将输出重定向到文件

可以使用-RedirectStandardOutput和-RedirectStandardError将进程输出重定向到文件。用于将命令输出捕获到日志中。与-NoNewWindow结合使用以处理控制台应用程序。

start6.ps1
Start-Process cmd.exe -ArgumentList "/c dir" `
    -NoNewWindow -RedirectStandardOutput out.txt

运行dir命令并将输出保存到out.txt。 /c 参数告诉cmd在执行后终止。-NoNewWindow将输出保留在PowerShell中。

使用工作目录启动进程

-WorkingDirectory 参数设置进程的启动目录。影响进程默认查找文件的位置。与PowerShell的当前目录不同。当路径是相对路径时很有用。

start7.ps1
Start-Process cmd.exe -WorkingDirectory "C:\temp"

以C:\temp作为当前目录启动命令提示符。任何文件操作默认都会使用此位置。不影响PowerShell的位置。

在默认浏览器中启动Web URL

Start-Process可以在默认Web浏览器中打开URL。只需提供URL而不是可执行文件路径。系统会处理协议关联。也适用于mailto:等其他协议。

start8.ps1
Start-Process "https://www.zetcode.com"

在默认浏览器中打开ZetCode网站。无需指定浏览器可执行文件。系统会使用https协议的注册URL处理程序。

来源

PowerShell 文档

在本文中,我们介绍了PowerShell中的Start-Process cmdlet。

作者

我的名字是Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从2007年开始撰写编程文章。迄今为止,我已撰写了1400多篇文章和8本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PowerShell 教程