当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Start-Process (Microsoft.PowerShell.Management)

作者:精品下载站 日期:2024-12-14 02:10:15 浏览:16 分类:玩电脑

Start-Process (Microsoft.PowerShell.Management)


Start-Process

模块 :Microsoft.PowerShell.Management

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

句法

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

描述

Start-Process cmdlet 在本地计算机上启动一个或多个进程。默认情况下,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 进程中运行的文件 powershell.exe 创建一个 System.Diagnostics.ProcessStartInfo 对象。 ProcessStartInfo 对象的 Verbs 属性显示您可以在 powershell 中使用 OpenRunAs 动词.exe,或任何运行 .exe 文件的进程。

示例 7:指定进程的参数

这两个命令都会启动 Windows 命令解释器,对 Program Files 文件夹发出 dir 命令。由于此文件夹名称包含空格,因此该值需要用转义引号引起来。请注意,第一个命令将字符串指定为 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 正在运行 Linux nohup 命令,该命令将 pwsh 作为独立进程启动。有关更多信息,请参阅 Wikipedia 上的 nohup 文章。

示例 9:覆盖进程的环境变量

默认情况下,当您使用 Start-Process 时,将使用与当前会话相同的环境变量创建新进程。您可以使用环境参数来覆盖这些变量的值。

在此示例中,环境变量 FOO 被添加到会话中,并以 foo 作为值。

该示例运行 Start-Process 三次,每次都返回 FOO 的值。第一个命令不会覆盖环境变量。在第二个命令中,FOO 设置为 bar。在第三个命令中,FOO 设置为 $null,这会将其删除。

$env:FOO = 'foo'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO'
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO' -Environment @{
    FOO  = 'bar'
}
Start-Process pwsh -NoNewWindow -ArgumentList '-c', '$env:FOO' -Environment @{
    FOO  = $null
}

foo
bar

参数

-ArgumentList

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

ArgumentList 值传递到新进程时,不包括 PowerShell 字符串的外引号。如果参数或参数值包含空格或引号,则需要用转义双引号将它们引起来。有关更多信息,请参阅 about_Quoting_Rules。

为了获得最佳结果,请使用包含所有参数和任何所需引号字符的单个 ArgumentList 值。

类型 :

String[]

别名:

Args

位置:

1

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Confirm

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

类型 :

SwitchParameter

别名:

cf

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Credential

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

输入用户名,例如 User01Domain01\User01,或输入由 Get-Credential cmdlet。如果您键入用户名,系统会提示您输入密码。

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

笔记

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

类型 :

PS凭证

别名:

RunAs

位置:

命名

默认值:

当前用户

必需的:

False

接受管道输入:

False

接受通配符:

False

-Environment

指定要为进程覆盖的一个或多个环境变量作为哈希表。将环境变量的名称指定为哈希表中的键以及所需的值。要取消设置环境变量,请将其值指定为 $null

指定的变量在此过程中被替换。当您指定 PATH 环境变量时,它将替换为 $PSHOME 的值,后跟此参数中指定的值。在 Windows 上,该命令将机器和用户范围中的 PATH 值附加到新值之后。

此参数是在 PowerShell 7.4 中添加的。

类型 :

哈希表

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-FilePath

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

如果仅指定与系统命令不对应的文件名,请使用 WorkingDirectory 参数指定路径。

类型 :

String

别名:

PSPath, Path

位置:

0

默认值:

None

必需的:

True

接受管道输入:

False

接受通配符:

False

-LoadUserProfile

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

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

类型 :

SwitchParameter

别名:

Lup

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-NoNewWindow

在当前控制台窗口中启动新进程。默认情况下,在 Windows 上,PowerShell 将打开一个新窗口。在非 Windows 系统上,您永远不会看到新窗口。

您不能在同一命令中使用 NoNewWindowWindowStyle 参数。

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

类型 :

SwitchParameter

别名:

nnw

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-PassThru

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

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-RedirectStandardError

指定一个文件。此 cmdlet 将进程生成的任何错误发送到您指定的文件。输入路径和文件名。默认情况下,错误显示在控制台中。

类型 :

String

别名:

RSE

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-RedirectStandardInput

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

类型 :

String

别名:

RSI

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-RedirectStandardOutput

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

类型 :

String

别名:

RSO

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-UseNewEnvironment

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

在 Windows 上,当您使用 UseNewEnvironment 时,新进程启动时仅包含为 Machine 范围定义的默认环境变量。这会产生副作用,即 $env:USERNAME 设置为 SYSTEM。不包含用户范围内的任何变量。

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Verb

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

下表显示了一些常见进程文件类型的动词。

.cmd

编辑打开打印RunAsRunAsUser

.exe

打开RunAsRunAsUser

.txt

打开打印打印到

.wav

打开播放

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

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

类型 :

String

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Wait

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

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-WhatIf

显示 cmdlet 运行时会发生什么情况。该 cmdlet 未运行。

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

类型 :

SwitchParameter

别名:

wi

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-WindowStyle

指定用于新进程的窗口的状态。默认值为正常。该参数可接受的值为:

    Normal
    Hidden
    Minimized
    Maximized

    您不能在同一命令中使用 WindowStyleNoNewWindow 参数。

    该参数不适用于非 Windows 系统。在非 Windows 系统上使用时,您永远不会看到新窗口。

    类型 :

    处理窗口样式

    接受的值:

    正常、隐藏、最小化、最大化

    位置:

    命名

    默认值:

    None

    必需的:

    False

    接受管道输入:

    False

    接受通配符:

    False

    -WorkingDirectory

    指定新进程应启动的位置。

    如果未指定,cmdlet 默认为 FilePath 参数中指定的完全限定位置。如果FilePath参数的值不是完全限定的,则默认为调用进程的当前工作目录。

    不支持通配符。路径不得包含会被解释为通配符的字符。

    类型 :

    String

    位置:

    命名

    默认值:

    None

    必需的:

    False

    接受管道输入:

    False

    接受通配符:

    False

    输入

    您无法通过管道将对象传递到此 cmdlet。

    输出

    默认情况下,此 cmdlet 不返回任何输出。

    流程

    当您使用 PassThru 参数时,此 cmdlet 将返回一个 Process 对象。

    笔记

    PowerShell 包含以下 Start-Process 别名:

    • 所有平台

        saps
    • Windows

        start
      • 本机命令是安装在操作系统中的可执行文件。这些可执行文件可以从任何命令行 shell 运行,例如 PowerShell。通常,您运行该命令的方式与在 bash 或 cmd.exe 中运行的方式完全相同。 Start-Process cmdlet 可用于运行任何本机命令,但仅应在需要控制命令执行方式时使用。

        Start-Process 对于在非 Windows 平台上运行 GUI 程序非常有用。例如,运行 Start-Process gedit 来启动 GNOME 桌面环境中常见的图形文本编辑器。

        默认情况下,Start-Process 异步启动进程。即使新进程仍在运行,控制权也会立即返回到 PowerShell。

        • 在本地系统上,启动的进程独立于调用进程而存在。
        • 在远程系统上,当远程会话结束时,新进程将在 Start-Process 命令之后立即终止。因此,您不能在远程会话中使用 Start-Process 并期望启动的进程比会话的寿命长。

        如果您确实需要在远程会话中使用 Start-Process,请使用 Wait 参数调用它。或者您可以使用其他方法在远程系统上创建新进程。

        使用 Wait 参数时,Start-Process 会等待进程树(进程及其所有子进程)退出,然后再返回控制权。这与 Wait-Process cmdlet 的行为不同,后者仅等待指定进程退出。

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

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

        您需要 登录账户 后才能发表评论

        取消回复欢迎 发表评论:

        关灯