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]
[-Environment <hashtable>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Start-Process
[-FilePath] <string>
[[-ArgumentList] <string[]>]
[-WorkingDirectory <string>]
[-PassThru]
[-Verb <string>]
[-WindowStyle <ProcessWindowStyle>]
[-Wait]
[-Environment <hashtable>]
[-WhatIf]
[-Confirm]
[<CommonParameters>]
Description
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
為 建立 System.Diagnostics.ProcessStartInfo 物件,該物件 powershell.exe
是在 PowerShell 進程中執行的檔案。 ProcessStartInfo 物件的 Verbs 屬性會顯示您可以使用 Open 和 RunAs
verbs 搭配 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:在 Linux 上建立中斷連結的程式
在 Windows 上, Start-Process
建立獨立於啟動殼層獨立執行的獨立進程。 在非 Windows 平臺上,新啟動的程式會附加至啟動的殼層。 如果啟動殼層已關閉,則會終止子進程。
若要避免在類似 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 文章。
範例 9:覆寫進程的環境變數
根據預設,當您使用 Start-Process
時,會使用與目前會話相同的環境變數來建立新的進程。 您可以使用 Environment 參數來覆寫這些變數的值。
在此範例中,環境變數 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 |
Position: | 1 |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Confirm
執行 Cmdlet 之前先提示您確認。
類型: | SwitchParameter |
別名: | cf |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Credential
指定具有執行此動作許可權的用戶帳戶。 根據預設,Cmdlet 會使用目前用戶的認證。
輸入用戶名稱,例如User01或Domain01\User01,或輸入 Cmdlet 所產生的 Get-Credential
PSCredential 物件。 如果您輸入使用者名稱,系統會提示您輸入密碼。
認證會儲存在 PSCredential 物件中,密碼會儲存為 SecureString。
注意
如需 SecureString 數據保護的詳細資訊,請參閱 SecureString 有多安全?。
類型: | PSCredential |
別名: | RunAs |
Position: | Named |
預設值: | Current user |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Environment
指定要將進程的一或多個環境變數覆寫為哈希表。 指定環境變數的名稱做為哈希表中的索引鍵和所需的值。 若要取消設定環境變數,請將其值指定為 $null
。
程式中會取代指定的變數。 當您指定環境變數時 PATH
,它會取代為 $PSHOME
的值,後面接著此參數中的指定值。 在 Windows 上,命令會在新值 PATH
之後,在計算機和用戶範圍中附加的值。
此參數已在PowerShell 7.4中新增。
類型: | Hashtable |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-FilePath
指定程式在程式中執行的選擇性路徑和檔名。 輸入與計算機上程式相關聯的可執行檔或檔名稱,例如 .txt
或 .doc
檔案。 此為必要參數。
如果您只指定未對應至系統命令的檔名,請使用 WorkingDirectory 參數來指定路徑。
類型: | String |
別名: | PSPath, Path |
Position: | 0 |
預設值: | None |
必要: | True |
接受管線輸入: | False |
接受萬用字元: | False |
-LoadUserProfile
指出此 Cmdlet 會載入儲存在目前使用者的登錄機碼中的 HKEY_USERS
Windows 使用者設定檔。 參數不適用於非 Windows 系統。
此參數不會影響 PowerShell 配置檔。 如需詳細資訊,請參閱 about_Profiles。
類型: | SwitchParameter |
別名: | Lup |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-NoNewWindow
在目前的主控台視窗中啟動新的程式。 根據預設,在 Windows 上,PowerShell 會開啟新的視窗。 在非 Windows 系統上,您永遠不會取得新的視窗。
您無法在相同的命令中使用 NoNewWindow 和 WindowStyle 參數。
參數不適用於非 Windows 系統。
類型: | SwitchParameter |
別名: | nnw |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-PassThru
針對 Cmdlet 啟動的每個進程,傳回進程物件。 根據預設,此 Cmdlet 不會產生任何輸出。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-RedirectStandardError
指定檔案。 此 Cmdlet 會將進程所產生的任何錯誤傳送至您指定的檔案。 輸入路徑和檔名。 根據預設,錯誤會顯示在控制台中。
類型: | String |
別名: | RSE |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-RedirectStandardInput
指定檔案。 此 Cmdlet 會從指定的檔案讀取輸入。 輸入輸入檔的路徑和檔名。 根據預設,進程會從鍵盤取得其輸入。
類型: | String |
別名: | RSI |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-RedirectStandardOutput
指定檔案。 此 Cmdlet 會將進程所產生的輸出傳送至您指定的檔案。 輸入路徑和檔名。 根據預設,輸出會顯示在控制台中。
類型: | String |
別名: | RSO |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-UseNewEnvironment
指出此 Cmdlet 會使用為進程指定的新環境變數。 根據預設,啟動的進程會使用繼承自父進程的環境變數來執行。
在 Windows 上,當您使用 UseNewEnvironment 時,新進程只會開始包含針對 計算機 範圍定義的默認環境變數。 這有 設定為 SYSTEM 的副作用$env:USERNAME
。 不包含 [使用者] 範圍中的變數。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | 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 |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-Wait
表示此 Cmdlet 會先等候指定的進程及其子系完成,再接受更多輸入。 此參數會隱藏命令提示字元,或保留視窗,直到進程完成為止。
類型: | SwitchParameter |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-WhatIf
顯示執行 Cmdlet 後會發生的情況。 Cmdlet 未執行。
此參數是在 PowerShell 6.0 中引進的。
類型: | SwitchParameter |
別名: | wi |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-WindowStyle
指定用於新進程的窗口狀態。 預設值是 Normal
。
此參數可接受的值為:
Normal
Hidden
Minimized
Maximized
您無法在 相同的命令中使用 WindowStyle 和 NoNewWindow 參數。
參數不適用於非 Windows 系統。 在非 Windows 系統上使用時,您永遠不會取得新的視窗。
類型: | ProcessWindowStyle |
接受的值: | Normal, Hidden, Minimized, Maximized |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
-WorkingDirectory
指定新進程應該啟動的位置。
未指定時,Cmdlet 預設為 FilePath 參數中指定的完整位置。 如果 FilePath 參數的值未完整,則會預設為呼叫進程的目前工作目錄。
不支援通配符。 路徑不得包含將解譯為通配符的字元。
類型: | String |
Position: | Named |
預設值: | None |
必要: | False |
接受管線輸入: | False |
接受萬用字元: | False |
輸入
None
您無法使用管線將物件傳送至此 Cmdlet。
輸出
None
根據預設,此 Cmdlet 不會傳回任何輸出。
當您使用 PassThru 參數時,這個 Cmdlet 會 傳回 Process 物件。
備註
PowerShell 包含下列的 Start-Process
別名:
- 所有平臺
saps
- Windows
start
原生命令是安裝在作業系統中的可執行檔。 這些可執行檔可以從任何命令行殼層執行,例如 PowerShell。 通常,您執行命令的方式與 在 或 cmd.exe
中bash
完全相同。 Start-Process
Cmdlet 可用來執行任何原生命令,但只有在您需要控制命令的執行方式時,才應該使用。
Start-Process
適用於在非 Windows 平台上執行 GUI 程式。 例如,執行 Start-Process gedit
以啟動 GNOME 桌面環境通用的圖形化文本編輯器。
根據預設,Start-Process
會以異步方式啟動進程。 即使新進程仍在執行中,控件仍會立即傳回 PowerShell。
- 在本機系統上,啟動的進程會與呼叫程序無關。
- 在遠端系統上,當遠端會話結束時,緊接在命令之後
Start-Process
,就會終止新進程。 因此,您無法在預期啟動的行程超過工作階段的遠端工作階段中使用Start-Process
。
如果您需要在遠端會話中使用Start-Process
,請使用 Wait 參數叫用它。 或者,您可以使用其他方法在遠端系統上建立新的程式。
使用 Wait 參數時, Start-Process
會等候進程樹狀結構(進程及其所有子系)在傳回控件之前結束。 這與 Cmdlet 的行為 Wait-Process
不同,Cmdlet 只會等候指定的進程結束。
在 Windows 上,最常見的使用案例 Start-Process
是使用 Wait 參數封鎖進度,直到新進程結束為止。 在非 Windows 系統上,這很少需要,因為命令行應用程式的預設行為相當於 Start-Process -Wait
。
這個 Cmdlet 是使用 System.Diagnostics.Process 類別的 Start 方法實作。 如需這個方法的詳細資訊,請參閱 Process.Start 方法。