如何在後臺執行 PowerShell 命令?
要在 PowerShell 中後臺執行命令,需要使用後臺作業 cmdlet。後臺作業表示在後臺執行命令/作業,而不會佔用控制檯。
Start-Job 是 PowerShell 的作業排程程式 cmdlet 之一,它在後臺執行 PowerShell 命令,而不會與當前使用者會話互動作為作業,以便使用者可以在 PowerShell 控制檯中工作,而不會在命令在後臺執行時失去對控制檯的控制。
當 PowerShell 的作業使用 Start-Job 啟動時,即使作業需要較長時間,作業也會立即返回物件。
Start-Job 旨在在本地計算機上執行,因為它沒有遠端作業引數。要遠端執行作業,需要使用帶有 -AsJob 引數的 Invoke-Command。
示例
Start-Job -ScriptBlock{Get-EventLog -LogName System}執行命令後,以下輸出將立即生成。
輸出
Id Name PSJobTypeName State HasMoreData Location -- ---- ------------- ----- ----------- -------- 1 Job1 BackgroundJob Running True localhost
如果檢視以上輸出,作業狀態為正在執行。在指令碼塊中指定的命令越多,在後臺執行的 PowerShell 作業就越多,消耗的記憶體就越多。
要執行多個命令,
Start-Job -ScriptBlock{Get-EventLog -LogName System; Get-Process}您還可以使用 Invoke-Command 在後臺使用 -AsJob 引數執行作業。由於 InvokeCommand 旨在在遠端計算機上執行命令,因此您可以為遠端伺服器執行後臺作業。
示例
$sb = {Get-EventLog -LogName System; Get-Process}
Invoke-Command -ComputerName Test1-Win2k16,Test1-Win2k12 -ScriptBlock $sb -AsJob輸出

您還可以使用 -JobName 引數指定作業的名稱。
$sb = {Get-EventLog -LogName System; Get-Process}
Invoke-Command -ComputerName Test1-Win2k16,Test1-Win2k12 -ScriptBlock $sb -
AsJob -JobName NewJob輸出

要檢查作業狀態,請使用 Get-Job 命令。
Id Name PSJobTypeName State HasMoreData Location -- ---- ------------- ----- ----------- -------- 21 NewJob RemoteJob Running True Test1-Win2k16,Te
以上輸出已截斷。
每個作業至少有一個父作業和一個子作業。在後臺執行的子作業的數量取決於遠端計算機的數量。要獲取所有子作業,請在 Get-Job cmdlet 中使用 -IncludeChildJob 引數。
示例
Get-Job -IncludeChildJob
輸出
Id Name PSJobTypeName State HasMoreData Location -- ---- ------------- ----- ----------- -------- 21 NewJob RemoteJob Completed True Test1-Win2k16,T... 22 Job22 Completed True Test1-Win2k16 23 Job23 Completed True Test1-Win2k12
在我們執行上述命令時,作業已完成,並且可以在 State 屬性中看到。這裡 22 和 23 作業 ID 是在遠端計算機上執行的子作業,而 21 是父作業。
要立即在作業排程後獲取作業輸出,可以使用 Receive-Job 命令。即使作業狀態為正在執行,也可以執行此命令。
需要將 Receive-Job 命令與具有名稱、ID、作業名稱變數或任何其他受支援引數的作業一起使用。
示例
Start-Job -Command {Get-Service Spooler, W32Time}
Receive-Job -Name Job5要使用 ID 檢索作業,
Receive-Job -ID 5
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP