Start-Process

启动本地计算机上的一个或多个进程。

语法

Start-Process
     [-FilePath] <String>
     [[-ArgumentList] <String[]>]
     [-Credential <PSCredential>]
     [-WorkingDirectory <String>]
     [-LoadUserProfile]
     [-NoNewWindow]
     [-PassThru]
     [-RedirectStandardError <String>]
     [-RedirectStandardInput <String>]
     [-RedirectStandardOutput <String>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-UseNewEnvironment]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]
Start-Process
     [-FilePath] <String>
     [[-ArgumentList] <String[]>]
     [-WorkingDirectory <String>]
     [-PassThru]
     [-Verb <String>]
     [-WindowStyle <ProcessWindowStyle>]
     [-Wait]
     [-WhatIf]
     [-Confirm]
     [<CommonParameters>]

说明

cmdlet Start-Process 在本地计算机上启动一个或多个进程。 默认情况下, Start-Process 创建一个新进程,该进程继承当前进程中定义的所有环境变量。

若要指定在进程中运行的程序,请输入可执行文件或脚本文件,或者可使用计算机上的程序打开的文件。 如果指定非可执行文件, Start-Process 请启动与该文件关联的程序,类似于 Invoke-Item cmdlet。

可以使用 Start-Process 参数来指定选项,例如加载用户配置文件、在新窗口中启动进程或使用备用凭据。

示例

示例 1:启动使用默认值的进程

此示例启动使用 Sort.exe 当前文件夹中的文件的进程。 此命令使用所有默认值,包括默认窗口样式、工作文件夹和凭据。

Start-Process -FilePath "sort.exe"

示例 2:打印文本文件

此示例启动一个打印 C:\PS-Test\MyFile.txt 文件的进程。

Start-Process -FilePath "myfile.txt" -WorkingDirectory "C:\PS-Test" -Verb Print

示例 3:启动一个进程,以对项进行排序并返回到新文件

此示例启动一个进程,该进程对文件中的项 Testsort.txt 进行排序,并返回文件中的 Sorted.txt 已排序项。 任何错误都会写入 SortError.txt 文件。

Start-Process -FilePath "Sort.exe" -RedirectStandardInput "Testsort.txt" -RedirectStandardOutput "Sorted.txt" -RedirectStandardError "SortError.txt" -UseNewEnvironment

UseNewEnvironment 参数指定进程使用自己的环境变量运行。

示例 4:在最大化窗口中启动进程

此示例启动 Notepad.exe 该过程。 它将最大化窗口并在该进程完成之前一直保留该窗口。

Start-Process -FilePath "notepad" -Wait -WindowStyle Maximized

示例 5:以管理员身份启动 PowerShell

此示例使用 “以管理员身份运行 ”选项启动 PowerShell。

Start-Process -FilePath "powershell" -Verb RunAs

示例 6:使用不同动词来启动进程

此示例演示如何查找启动进程时可以使用的谓词。 可用谓词由进程中运行的文件的文件扩展名确定。

$startExe = New-Object System.Diagnostics.ProcessStartInfo -Args PowerShell.exe
$startExe.verbs

open
runas
runasuser

此示例用于 New-Object 创建 System.Diagnostics.ProcessStartInfo 对象,用于 PowerShell.exe,该文件在 PowerShell 进程中运行。 ProcessStartInfo 对象的 Verbs 属性显示,可以将 OpenRunAs 谓词与运行文件的任何进程.exe一起使用PowerShell.exe

示例 7:指定进程的参数

这两个命令都启动 Windows 命令解释器,并在Program Files文件夹中发出dir命令。 由于此 foldername 包含空格,因此值需要用转义引号括起来。 请注意,第一个命令将字符串指定为 ArgumentList。 第二个命令是字符串数组。

Start-Process -FilePath "$env:comspec" -ArgumentList "/c dir `"%systemdrive%\program files`""
Start-Process -FilePath "$env:comspec" -ArgumentList "/c","dir","`"%systemdrive%\program files`""

示例 8:在 Linux 上创建分离的进程

在 Windows 上, Start-Process 创建独立于启动 shell 运行的独立进程。 在非 Windows 平台上,新启动的进程附加到启动的 shell。 如果启动 shell 已关闭,则终止子进程。

若要避免在类似 Unix 的平台上终止子进程,可以与 结合使用Start-Processnohup。 以下示例在 Linux 上启动 PowerShell 的后台实例,即使在关闭启动会话后仍保持活动状态。 此命令 nohup 收集当前目录中文件中 nohup.out 的输出。

# Runs for 2 minutes and appends output to ./nohup.out
Start-Process nohup 'pwsh -noprofile -c "1..120 | % { Write-Host . -NoNewline; sleep 1 }"'

在此示例中,Start-Process运行作为分离进程启动pwsh的 Linux nohup 命令。 有关详细信息,请参阅 nohup 的“人”页。

参数

-ArgumentList

指定此 cmdlet 启动进程时要使用的参数或参数值。 参数可以接受为单个字符串,参数用空格分隔,也可以接受为用逗号分隔的字符串数组。

如果参数或参数值包含空格,则需要用转义双引号括起来。 有关详细信息,请参阅 about_Quoting_Rules

Type:String[]
Aliases:Args
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Confirm

提示你在运行 cmdlet 之前进行确认。

Type:SwitchParameter
Aliases:cf
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Credential

指定有权执行此操作的用户帐户。 默认情况下,该 cmdlet 使用当前用户的凭据。

键入用户名(如 User01Domain01\User01),或输入 cmdlet 生成的 Get-CredentialPSCredential 对象。 如果键入用户名,系统会提示输入密码。

凭据存储在 PSCredential 对象中,密码存储为 SecureString

注意

有关 SecureString 数据保护的详细信息,请参阅 SecureString 的安全性如何?

Type:PSCredential
Aliases:RunAs
Position:Named
Default value:Current user
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-FilePath

指定进程中运行的程序的可选路径和文件名。 输入与计算机上的程序关联的可执行文件或文档的名称,例如 .txt.doc 文件。 此参数是必需的。

如果仅指定文件名,请使用 WorkingDirectory 参数指定路径。

Type:String
Aliases:PSPath, Path
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-LoadUserProfile

指示此 cmdlet 加载存储在当前用户的注册表项中的 HKEY_USERS Windows 用户配置文件。 该参数不适用于非 Windows 系统。

此参数不会影响 PowerShell 配置文件。 有关详细信息,请参阅 about_Profiles

Type:SwitchParameter
Aliases:Lup
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NoNewWindow

在当前控制台窗口中启动新进程。 默认情况下,在 Windows 上,PowerShell 会打开一个新窗口。 在非 Windows 系统上,你永远不会获得新的终端窗口。

不能在同一命令中使用 NoNewWindow 参数和 WindowStyle 参数。

该参数不适用于非 Windows 系统。

Type:SwitchParameter
Aliases:nnw
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-PassThru

为 cmdlet 启动的每个进程返回一个进程对象。 默认情况下,此 cmdlet 将不产生任何输出。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RedirectStandardError

指定文件。 此 cmdlet 将进程产生的所有错误发送给指定的文件。 输入路径和文件名。 默认情况下,在控制台中显示这些错误。

Type:String
Aliases:RSE
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RedirectStandardInput

指定文件。 此 cmdlet 从指定文件读取输入。 输入输入文件的路径和文件名。 默认情况下,进程从键盘获取其输入。

Type:String
Aliases:RSI
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-RedirectStandardOutput

指定文件。 此 cmdlet 将进程产生的输出发送给指定的文件。 输入路径和文件名。 默认情况下,在控制台中显示该输出。

Type:String
Aliases:RSO
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UseNewEnvironment

指示此 cmdlet 使用为进程指定的新环境变量。 默认情况下,启动的进程使用从父进程继承的环境变量运行。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Verb

指定此 cmdlet 启动进程时要使用的动词。 可用的谓词由进程中运行的文件的文件扩展名确定。

下表列出了适用于某些常用进程文件类型的动词。

文件类型 动词
.cmd 编辑、打开、打印、RunAs、RunAsUser
.exe Open、RunAs、RunAsUser
.txt 打开、打印、PrintTo
.wav 打开、播放

若要查找可用于进程中运行的文件的谓词,请使用 New-Object cmdlet 为该文件创建 System.Diagnostics.ProcessStartInfo 对象。 可用的谓词位于 ProcessStartInfo 对象的 Verbs 属性中。 有关详细信息,请参阅示例。

此参数不适用于非 Windows 系统。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Wait

指示此 cmdlet 在接受更多输入之前等待指定的进程及其后代完成。 此参数禁止命令提示符或保留窗口,直到进程完成。

Type:SwitchParameter
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WhatIf

显示在此 cmdlet 运行的情况下将会发生什么。 此 cmdlet 未运行。

此参数是在 PowerShell 6.0 中引入的。

Type:SwitchParameter
Aliases:wi
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WindowStyle

指定用于新进程的窗口的状态。 此参数的可接受值为: NormalHidden最小化最大化。 默认值为 Normal

不能在同一命令中使用 WindowStyle 参数和 NoNewWindow 参数。

此参数不适用于非 Windows 系统。

Type:ProcessWindowStyle
Accepted values:Normal, Hidden, Minimized, Maximized
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-WorkingDirectory

指定新进程应启动的位置。 默认值是正在启动的可执行文件或文档的位置。 不支持通配符。 路径名称不得包含将解释为通配符的字符。

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

None

不能通过管道将输入传递给此 cmdlet。

输出

None, System.Diagnostics.Process

如果指定 PassThru 参数,则此 cmdlet 会生成 System.Diagnostics.Process。 否则,此 cmdlet 不返回任何输出。

备注

  • 此 cmdlet 是使用 System.Diagnostics.Process 类的 Start 方法实现的。 有关此方法的详细信息,请参阅 Process.Start 方法

  • 在 Windows 上使用 UseNewEnvironment 时,新进程仅开始包含为 计算机 范围定义的默认环境变量。 这会影响设置为 $env:USERNAMESYSTEM 的一面。 不包括 用户 范围中的变量。

  • 在 Windows 上,最常见的用例 Start-Process 是使用 Wait 参数阻止进度,直到新进程退出。 在非 Windows 系统上,这很少需要,因为命令行应用程序的默认行为等效 Start-Process -Wait

  • 在非 Windows 系统上使用 Start-Process 时,你永远不会获得新的终端窗口。