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
文件。 UseNewEnvironment 参数指定进程使用其自己的环境变量运行。
$processOptions = @{
FilePath = "sort.exe"
RedirectStandardInput = "TestSort.txt"
RedirectStandardOutput = "Sorted.txt"
RedirectStandardError = "SortError.txt"
UseNewEnvironment = $true
}
Start-Process @processOptions
此示例使用 splatting 将参数传递给 cmdlet。 有关详细信息,请参阅 about_Splatting。
示例 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
为 powershell.exe
创建 System.Diagnostics.ProcessStartInfo 对象,该文件在 PowerShell 进程中运行。 ProcessStartInfo 对象的 Verbs 属性显示,可以将 Open 和 RunAs
谓词与 一起使用powershell.exe
,也可以与运行文件的任何进程一.exe
起使用。
示例 7:指定进程的参数
这两个 dir
命令都启动 Windows 命令解释器,并针对 Program Files
文件夹发出命令。 由于此 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:使用备用凭据以管理员身份运行命令
在 Windows 上,可以运行 Start-Process -Verb RunAs
以使用提升的权限启动进程。
这会提升当前用户的上下文。 使用 Credential 参数可以指定备用用户名和密码,从而可以在其他用户内容中启动进程。
但是, Credential 和 Verb 参数不能一起使用。
若要使用提升的权限启动进程(使用备用凭据),必须先使用备用凭据启动 PowerShell,然后使用 Start-Process
以提升的权限启动进程。
$cred = Get-Credential
$args = '-noprofile -command "Start-Process cmd.exe -Verb RunAs -args /k"'
Start-Process pwsh.exe -Credential $cred -WindowStyle Hidden -ArgumentList $args
该示例从在备用凭据下运行的 PowerShell 会话提升的权限开始 cmd.exe
。
示例 9:在 Linux 上创建分离的进程
在 Windows 上, Start-Process
创建一个独立于启动 shell 运行的独立进程。 在非 Windows 平台上,新启动的进程将附加到启动的 shell。 如果关闭启动 shell,则终止子进程。
若要避免在类似 Unix 的平台上终止子进程,可以与 nohup
结合使用Start-Process
。 以下示例在 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
运行 Linux nohup
命令,该命令作为分离的进程启动 pwsh
。 有关详细信息,请参阅维基百科上的 nohup 文章。
参数
-ArgumentList
指定此 cmdlet 启动进程时要使用的参数或参数值。 参数可以接受为单个字符串,参数以空格分隔,也可以接受为用逗号分隔的字符串数组。 cmdlet 将数组联接到单个字符串中,数组的每个元素用单个空格分隔。
将 ArgumentList 值传递到新进程时,不包括 PowerShell 字符串的外部引号。 如果参数或参数值包含空格或引号,则需要用转义双引号括起来。 有关详细信息,请参阅 about_Quoting_Rules。
为获得最佳结果,请使用包含所有参数和任何所需引号字符的单个 ArgumentList 值。
Type: | String[] |
Aliases: | Args |
Position: | 1 |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Confirm
提示你在运行 cmdlet 之前进行确认。
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
指定有权执行此操作的用户帐户。 默认情况下,该 cmdlet 使用当前用户的凭据。
键入用户名(如 User01 或 Domain01\User01),或输入 cmdlet Get-Credential
生成的 PSCredential 对象。 如果键入用户名,系统会提示输入密码。
凭据存储在 PSCredential 对象中,密码存储为 SecureString。
注意
有关 SecureString 数据保护的详细信息,请参阅 SecureString 的安全性如何?。
Type: | PSCredential |
Aliases: | RunAs |
Position: | Named |
Default value: | Current user |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-FilePath
指定进程中运行的程序的可选路径和文件名。 输入与计算机上的程序关联的可执行文件或文档(如 .txt
或 .doc
文件)的名称。 此参数是必需的。
如果仅指定不对应于系统命令的文件名,请使用 WorkingDirectory 参数指定路径。
Type: | String |
Aliases: | PSPath, Path |
Position: | 0 |
Default value: | None |
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 |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-NoNewWindow
在当前控制台窗口中启动新进程。 默认情况下,在 Windows 上,PowerShell 会打开一个新窗口。 在非 Windows 系统上,你永远不会获得新窗口。
不能在同一命令中使用 NoNewWindow 和 WindowStyle 参数。
参数不适用于非 Windows 系统。
Type: | SwitchParameter |
Aliases: | nnw |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-PassThru
为 cmdlet 启动的每个进程返回一个进程对象。 默认情况下,此 cmdlet 不会生成任何输出。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RedirectStandardError
指定文件。 此 cmdlet 将进程产生的所有错误发送给指定的文件。 输入路径和文件名。 默认情况下,在控制台中显示这些错误。
Type: | String |
Aliases: | RSE |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RedirectStandardInput
指定文件。 此 cmdlet 从指定文件读取输入。 输入输入文件的路径和文件名。 默认情况下,进程从键盘获取其输入。
Type: | String |
Aliases: | RSI |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-RedirectStandardOutput
指定文件。 此 cmdlet 将进程产生的输出发送给指定的文件。 输入路径和文件名。 默认情况下,在控制台中显示该输出。
Type: | String |
Aliases: | RSO |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UseNewEnvironment
指示此 cmdlet 使用为进程指定的新环境变量。 默认情况下,启动的进程使用从父进程继承的环境变量运行。
在 Windows 上,使用 UseNewEnvironment 时,新进程将仅开始包含为 计算机 范围定义的默认环境变量。 这具有将 设置为 SYSTEM 的$env:USERNAME
副作用。 不包括 用户 范围中的变量。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Verb
指定此 cmdlet 启动进程时要使用的动词。 可用的谓词由进程中运行的文件的文件扩展名确定。
下表列出了适用于某些常用进程文件类型的动词。
文件类型 | 动词 |
---|---|
.cmd | Edit , Open , Print , RunAs , RunAsUser |
.exe | Open , RunAs , RunAsUser |
.txt | Open , Print , PrintTo |
.wav | Open , Play |
若要查找可用于进程中运行的文件的谓词,请使用 New-Object
cmdlet 为该文件创建 System.Diagnostics.ProcessStartInfo 对象。 可用的谓词位于 ProcessStartInfo 对象的 Verbs 属性中。 有关详细信息,请参阅示例。
参数不适用于非 Windows 系统。
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Wait
指示此 cmdlet 在接受更多输入之前等待指定的进程及其后代完成。 此参数取消命令提示符或保留窗口,直到进程完成。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WhatIf
显示运行该 cmdlet 时会发生什么情况。 cmdlet 未运行。
此参数是在 PowerShell 6.0 中引入的。
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WindowStyle
指定用于新进程的窗口的状态。 默认值为 Normal
。
此参数的可接受值为:
Normal
Hidden
Minimized
Maximized
不能在同一命令中使用 WindowStyle 和 NoNewWindow 参数。
参数不适用于非 Windows 系统。 在非 Windows 系统上使用 时,永远不会获得新窗口。
Type: | ProcessWindowStyle |
Accepted values: | Normal, Hidden, Minimized, Maximized |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-WorkingDirectory
指定新进程的起始位置。
如果未指定,则 cmdlet 默认为 FilePath 参数中指定的完全限定位置。 如果 FilePath 参数的值不是完全限定的,则它默认为调用进程的当前工作目录。
不支持通配符。 路径不得包含将解释为通配符的字符。
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
输入
None
不能通过管道将对象传递给此 cmdlet。
输出
None
默认情况下,此 cmdlet 不返回任何输出。
使用 PassThru 参数时,此 cmdlet 返回 Process 对象。
备注
PowerShell 包含以下别名 Start-Process
:
- 所有平台
saps
- Windows
start
本机命令是安装在操作系统中的可执行文件。 这些可执行文件可以从任何命令行 shell(如 PowerShell)运行。 通常,运行命令的方式与在 bash
或 cmd.exe
中完全相同。 cmdlet Start-Process
可用于运行任何本机命令,但应仅在需要控制命令的执行方式时才使用。
Start-Process
对于在非 Windows 平台上运行 GUI 程序很有用。 例如,运行 Start-Proces gedit
以启动 GNOME 桌面环境通用的图形文本编辑器。
默认情况下, Start-Process
以异步方式启动进程。 即使新进程仍在运行,控制权也会立即返回到 PowerShell。
- 在本地系统上,启动的进程独立于调用进程。
- 在远程系统上,新进程在远程会话结束时终止,紧
Start-Process
跟命令之后。 因此,不能Start-Process
在期望启动的进程超过会话的远程会话中使用 。
如果需要 Start-Process
在远程会话中使用 ,请使用 Wait 参数调用它。 或者,可以使用其他方法在远程系统上创建新进程。
使用 Wait 参数时, Start-Process
等待进程树 (进程及其所有后代) 退出,然后再返回控制权。 这不同于 cmdlet 的行为 Wait-Process
,后者仅等待指定的进程退出。
在 Windows 上,最常见的用例 Start-Process
是使用 Wait 参数阻止进度,直到新进程退出。 在非 Windows 系统上,很少需要这样做,因为命令行应用程序的默认行为等效于 Start-Process -Wait
。
此 cmdlet 是使用 System.Diagnostics.Process 类的 Start 方法实现的。 有关此方法的详细信息,请参阅 Process.Start 方法。
相关链接
反馈
提交和查看相关反馈