使用 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
帶有指定引數的 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn