使用 Windows PowerShell 启动进程

Marion Paul Kenneth Mendoza 2023年1月30日
  1. PowerShell 中的 Start-Process Cmdlet
  2. Start-Process Cmdlet 参数
  3. PowerShell Start-Process 的优势
使用 Windows PowerShell 启动进程

Start-Process cmdlet 是一个 PowerShell 命令,用于以受控和托管的方式启动单个或多个进程。默认情况下,启动的进程会继承所有当前的 PowerShell 环境。

Start-Process cmdlet 可以执行或运行可执行文件、批处理脚本、MS-DOS 和 PowerShell 命令,甚至 Java 应用程序。此外,Windows PowerShell 可以使用 Start-Process cmdlet 来指定用户配置文件、Windows 状态和凭据等。

本文将讨论 Start-Process cmdlet 如何工作,并在编写脚本时使用它。

PowerShell 中的 Start-Process Cmdlet

Start-Process cmdlet 执行一个或多个进程、可执行文件或脚本文件,或已安装软件可以在计算机上打开的任何文件。

使用 Windows PowerShell 时,Start-Process cmdlet 的基本语法如下所示。

Start-Process <string>

Start-Process Cmdlet 参数

Start-Process cmdlet 可以使用参数为 cmdlet 添加更多功能、功能和灵活性。

启动新进程或可执行文件

如前所述,Start-Process 命令的最基本用法是提供可执行文件、批处理或脚本文件,或类似以下语法的命令。例如,使用以下语法调用记事本应用程序时将打开。

Start-Process notepad.exe

或者,cmdlet 可以使用 -FilePath 参数来指定我们要执行的文件位置。

Start-Process -FilePath notepad.exe

我们也可以在下面指定可执行文件或批处理文件的完整路径。在下面的示例中,我们将在下面的示例中执行位于 D:\scripts 目录下的批处理文件。

Start-Process -FilePath "D:\scripts\backup.bat"

将标准输入设置为文件

我们可以使用标准输入指定进程输入,其中提供的标准输入内容被重定向到给定进程。在这种情况下,-RedirectStandardInput 参数可以将文件设置为新创建进程的输入。

Start-Process -FilePath "D:\scripts\backup.bat" -RedirectStandardInput test.txt

在上面的示例语法中,backup.bat 可执行输入来自文件 test.txt

将标准输出设置为文件

当一个进程被执行时,它可能会创建一些我们可以打印到终端、屏幕或文件的输出。我们可以使用 -RedirectStandardOutput 参数来指定输出到文件中。

Start-Process -FilePath "D:\scripts\backup.bat" -RedirectStandardOutput test.txt

backup.bat 可执行输出来自上述示例语法中的文件 test.txt

将标准错误输出设置为文件

在运行进程时,可能会出现错误,并且这些错误的相关信息默认会打印到控制台或终端中。使用 -RedirectStandardError 参数可以将输出重定向到如下文件。

Start-Process -FilePath "D:\scripts\backup.bat" -RedirectStandardError errors.txt

在上面的示例语法中,如果我们在运行 backup.bat 可执行文件时遇到任何错误,错误将打印在文件 errors.txt 中。

设置工作目录

默认情况下,新进程在当前工作目录中执行,通常是系统驱动器 C:。但是,我们可以使用 -WorkingDirectory 参数在下面设置一个新的工作目录。

Start-Process notepad.exe -WorkingDirectory "D:\"

对于这个例子,

创造新环境

连同我们之前在文章中讨论的参数,我们可以将它们合并到一个脚本块中。

-UseNewEnvironment 参数指定进程使用其环境变量运行。

$processOptions = @{
    FilePath = "sort.exe"
    RedirectStandardInput = "TestSort.txt"
    RedirectStandardOutput = "Sorted.txt"
    RedirectStandardError = "SortError.txt"
    UseNewEnvironment = $true
}
Start-Process @processOptions

最大化窗口中的启动进程

Start-Process 命令可以启动命令行进程或可能有一些 GUI 的 GUI 进程。

该脚本可以使用 -WindowStyle 参数设置 GUI 窗口大小。该参数可以设置为最大化以最大化新的进程窗口。

Start-Process notepad.exe -WindowStyle Maximized

使用不同用户的 Start-Process

默认情况下,启动的进程以当前用户权限执行。但是,Start-Process cmdlet 可以使用 -Credential 参数通过提供我们要执行进程的新用户来更改进程的权限。

如果你输入用户名,系统将提示你输入密码。

Start-Process notepad.exe -Credential <username>

以管理员身份启动进程

我们可以使用 - Verb 参数以管理员身份运行应用程序。

Start-Process notepad.exe -Verb RunAs
注意
尽管以管理员身份运行,但由于本地计算机的用户帐户控制 (UAC),PowerShell 可能仍需要你确认。出于安全目的,我们不建议完全禁用 UAC。

带有指定参数的 Start-Process

命令、进程或批处理文件可以接受单个或多个参数来获取输入数据。

该输入数据称为参数,Start-Process 命令可以通过 -ArgumentList 向已启动的进程提供参数。提供的参数列表作为参数传递给进程。

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

PowerShell Start-Process 的优势

  • 脚本文件只能在本地打开。这是一种使用 Windows PowerShell 脚本防止远程攻击的安全技术。
  • cmdlet 在 Microsoft 支持的脚本环境中运行。只要支持 Windows PowerShell,Microsoft 就会投入资源来保持语言最新,并进行更新修订。
  • 一个庞大的开发者社区很容易与 Start-Process cmdlet 共享知识。
  • cmdlet 和系统数据存储使用标准、一致的语法和命名约定来轻松共享数据。
  • 使用此 cmdlet,操作系统的导航得到简化,让用户熟悉文件系统、注册表和其他数据。
  • 对象可以很容易地直接操作或发送到其他工具或数据库。
  • 软件供应商和开发人员可以构建自定义工具。
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn