使用 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