共用方式為


Start-Process

在本機計算機上啟動一或多個進程。

語法

Default (預設值)

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>]

UseShellExecute

Start-Process
    [-FilePath] <String>
    [[-ArgumentList] <String[]>]
    [-WorkingDirectory <String>]
    [-PassThru]
    [-Verb <String>]
    [-WindowStyle <ProcessWindowStyle>]
    [-Wait]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

Description

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 建立 System.Diagnostics.ProcessStartInfo 物件,以用於 powerShell 進程中執行的檔案 PowerShell.exeProcessStartInfo 物件的 Verbs 屬性顯示,可以將 OpenRunAs 謂詞與 PowerShell.exe一起使用,也可以與運行.exe檔的任何進程一起使用。

範例 7:指定進程的自變數

這兩個命令都會啟動 Windows 命令解釋器,並在 dir 資料夾中發出 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:在 Linux 上建立中斷連結的程式

在 Windows 上,Start-Process 會建立獨立進程,以獨立於啟動殼層執行。 在非 Windows 平臺上,新啟動的程式會附加至啟動的殼層。 如果啟動殼層已關閉,則會終止子進程。

若要避免在類似 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 做為中斷連結的程式。 有關更多資訊,請參閱 nohup 的手冊頁。

參數

-ArgumentList

指定此 Cmdlet 啟動行程時要使用的參數或參數值。 自變數可以接受為以空格分隔的自變數的單一字串,或做為以逗號分隔的字串陣列。 Cmdlet 會將陣列聯結成單一字串,其中陣列的每個元素都會以單一空格分隔。

ArgumentList 值傳遞給新進程時,不包括 PowerShell 字串的外引號。 如果參數或參數值包含空格或引號,則必須以逸出雙引弧括住。 如需詳細資訊,請參閱 about_Quoting_Rules

為獲得最佳結果,請使用包含所有參數和任何所需引號字元的單個 ArgumentList 值。

參數屬性

類型:

String[]

預設值:None
支援萬用字元:False
不要顯示:False
別名:參數

參數集

(All)
Position:1
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Confirm

在執行 Cmdlet 之前,提示您進行確認。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False
別名:cf

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Credential

指定具有執行此動作許可權的用戶帳戶。 根據預設,Cmdlet 會使用目前用戶的認證。

輸入使用者名稱,例如 User01Domain01\User01,或輸入 Cmdlet 所產生的 Get-Credential 物件。 如果您輸入使用者名稱,系統會提示您輸入密碼。

認證會儲存在 PSCredential 物件中,密碼會儲存為 secureString

備註

如需 SecureString 數據保護的詳細資訊,請參閱 SecureString 有多安全?

參數屬性

類型:PSCredential
預設值:Current user
支援萬用字元:False
不要顯示:False
別名:RunAs

參數集

Default
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-FilePath

指定程式在程式中執行的選擇性路徑和檔名。 輸入與電腦上的程式關聯的可執行檔或文件(如或 .txt.doc 檔案)的名稱。 這是必要參數。

如果您只指定檔名,請使用 WorkingDirectory 參數來指定路徑。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False
別名:PSPath, 路徑

參數集

(All)
Position:0
必要:True
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-LoadUserProfile

指出此 Cmdlet 會載入儲存在目前使用者的 HKEY_USERS 登錄機碼中的 Windows 使用者設定檔。 該參數不適用於非 Windows 系統。

此參數不會影響 PowerShell 配置檔。 如需詳細資訊,請參閱 about_Profiles

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False
別名:Lup

參數集

Default
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-NoNewWindow

在目前的主控台視窗中啟動新的程式。 根據預設,在 Windows 上,PowerShell 會開啟新的視窗。 在非 Windows 系統上,您永遠不會取得新的視窗。

您不能在相同的命令中使用 NoNewWindowWindowStyle 參數。

該參數不適用於非 Windows 系統。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False
別名:nnw

參數集

Default
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-PassThru

針對 Cmdlet 啟動的每個進程,傳回進程物件。 根據預設,此 Cmdlet 不會產生任何輸出。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-RedirectStandardError

指定檔案。 此 Cmdlet 會將進程所產生的任何錯誤傳送至您指定的檔案。 輸入路徑和檔名。 根據預設,錯誤會顯示在控制台中。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False
別名:RSE

參數集

Default
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-RedirectStandardInput

指定檔案。 此 Cmdlet 會從指定的檔案讀取輸入。 輸入輸入檔的路徑和檔名。 根據預設,進程會從鍵盤取得其輸入。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False
別名:RSI

參數集

Default
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-RedirectStandardOutput

指定檔案。 此 Cmdlet 會將進程所產生的輸出傳送至您指定的檔案。 輸入路徑和檔名。 根據預設,輸出會顯示在控制台中。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False
別名:RSO

參數集

Default
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-UseNewEnvironment

指出此 Cmdlet 會使用為進程指定的新環境變數。 根據預設,啟動的進程會使用繼承自父進程的環境變數來執行。

在 Windows 上,當您使用 UseNewEnvironment時,新進程只會開始包含針對 Machine 範圍定義的默認環境變數。 這具有將 設置為 $env:USERNAMESYSTEM 的副作用。 不包含來自 使用者 範圍的變數。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

Default
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值: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 系統。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False

參數集

UseShellExecute
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-Wait

表示此 Cmdlet 會先等候指定的進程及其子系完成,再接受更多輸入。 此參數會隱藏命令提示字元,或保留視窗,直到進程完成為止。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-WhatIf

顯示 Cmdlet 執行時會發生什麼事。 指令未執行。

此參數是在 PowerShell 6.0 中引進的。

參數屬性

類型:SwitchParameter
預設值:None
支援萬用字元:False
不要顯示:False
別名:無線

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-WindowStyle

指定用於新進程的窗口狀態。 此參數可接受的值為:NormalHiddenMinimizedMaximized。 預設值為 Normal

您不能在相同的命令中使用 WindowStyleNoNewWindow 參數。

該參數不適用於非 Windows 系統。 在非 Windows 系統上使用時,您永遠不會取得新的視窗。

參數屬性

類型:ProcessWindowStyle
預設值:None
接受的值:Normal, Hidden, Minimized, Maximized
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

-WorkingDirectory

指定新進程應該啟動的位置。 預設值是正在啟動之可執行檔或檔的位置。 不支援通配符。 路徑名不得包含將解釋為通配符的字元。

參數屬性

類型:String
預設值:None
支援萬用字元:False
不要顯示:False

參數集

(All)
Position:Named
必要:False
來自管線的值:False
來自管線按屬性名稱的值:False
來自剩餘引數的值:False

CommonParameters

此 Cmdlet 支援一般參數:-Debug、-ErrorAction、-ErrorVariable、-InformationAction、-InformationVariable、-OutBuffer、-OutVariable、-PipelineVariable、-ProgressAction、-Verbose、-WarningAction 和 -WarningVariable。 如需詳細資訊,請參閱 about_CommonParameters

輸入

None

您無法使用管線將輸入傳送至此 Cmdlet。

輸出

None, System.Diagnostics.Process

如果您 指定 passThru 參數,此 Cmdlet 會產生 System.Diagnostics.Process 物件。 否則,此 Cmdlet 不會傳回任何輸出。

備註

根據預設,Start-Process 會以異步方式 啟動進程。 即使新進程仍在執行中,控件仍會立即傳回 PowerShell。

  • 在本機系統上,啟動的進程會與呼叫程序無關。
  • 在遠端系統上,當遠端會話結束時,會在 Start-Process 命令之後立即終止新進程。 因此,不能在遠端會話中使用, Start-Process 期望啟動的進程比會話更有效。

如果您需要在遠端會話中使用 Start-Process,請使用 Wait 參數來叫用它。 或者,您可以使用其他方法在遠端系統上建立新的程式。

使用 Wait 參數時,Start-Process 等候進程樹狀結構(進程及其所有子系)在傳回控件之前結束。 這與 Wait-Process Cmdlet 的行為不同,此 Cmdlet 只會等候指定的進程結束。

在 Windows 上,Start-Process 最常見的使用案例是使用 Wait 參數來封鎖進度,直到新進程結束為止。 在非 Windows 系統上,這很少需要,因為命令行應用程式的預設行為相當於 Start-Process -Wait

這個 Cmdlet 是使用 System.Diagnostics.Process 類別的 Start 方法實作。 如需此方法的詳細資訊,請參閱 Process.Start 方法