Start-Job
啟動 Windows PowerShell 背景工作。
語法
Start-Job [-ScriptBlock] <scriptblock> [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]
Start-Job [[-FilePath] <string>] [[-InitializationScript] <scriptblock>] [-ArgumentList <Object[]>] [-Authentication {<Default> | <Basic> | <Negotiate> | <NegotiateWithImplicitCredential> | <Credssp> | <Digest> | <Kerberos>}] [-Credential <PSCredential>] [-InputObject <psobject>] [-Name <string>] [-RunAs32] [<CommonParameters>]
描述
Start-Job Cmdlet 會在本機電腦啟動 Windows PowerShell 背景工作。
Windows PowerShell 背景工作會「在背景中」執行命令,且與目前工作階段沒有任何互動。當您啟動背景工作時,即使工作需要很長的時間才能完成,還是會立即傳回工作物件。您可以在工作執行期間,繼續在工作階段中執行作業而不需中斷。
工作物件包含有用的工作資訊,但不包含工作結果。當工作完成時,請使用 Receive-Job Cmdlet 取得工作的結果。如需背景工作的詳細資訊,請參閱 about_Jobs。
若要在遠端電腦執行背景工作,請使用許多 Cmdlet 都有提供的 AsJob 參數,或使用 Invoke-Command Cmdlet 在遠端電腦執行 Start-Job 命令。如需詳細資訊,請參閱 about_Remote_Jobs。
參數
-ArgumentList <Object[]>
為 FilePath 參數所指定的指令碼指定引數 (參數值)。
由於接在 ArgumentList 參數名稱後面的所有值都會解譯成 ArgumentList 的值,因此 ArgumentList 參數必須是命令中的最後一個參數。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Authentication <AuthenticationMechanism>
指定用來驗證使用者認證的機制。有效值為 Default、Basic、Credssp、Digest、Kerberos、Negotiate 和 NegotiateWithImplicitCredential。預設值為 Default。
CredSSP 驗證僅適用於 Windows Vista、Windows Server 2008 和更新版的 Windows。
如需此參數之值的詳細資訊,請參閱 MSDN 中的 System.Management.Automation.Runspaces.AuthenticationMechanism 列舉說明。
警告:認證安全性服務提供者 (CredSSP) 驗證 (其中使用者的認證會傳送到遠端電腦) 是專為需要對一個以上的資源進行驗證的命令所設計,例如存取遠端網路共用。此機制會提高遠端操作的安全性風險。如果遠端電腦已經遭受危害,則傳遞給遠端電腦的認證可能會被用來控制網路工作階段。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-Credential <PSCredential>
指定具有執行此動作之權限的使用者帳戶。預設為目前使用者。
請輸入使用者名稱,例如 "User01" 或 "Domain01\User01",或是輸入 PSCredential 物件,例如由 Get-Credential Cmdlet 所產生的物件。
必要? |
false |
位置? |
named |
預設值 |
目前使用者 |
接受管線輸入? |
false |
接受萬用字元? |
false |
-FilePath <string>
將指定的本機指令碼當做背景工作來執行。請輸入指令碼的路徑和檔名,或經由管道將指令碼路徑輸出至 Start-Job。此指令碼必須存在於本機電腦或本機電腦可存取的目錄中。
使用此參數時,Windows PowerShell 會將指定之指令碼檔案的內容轉換成指令碼區塊,並將該指令碼區塊當做背景工作來執行。
必要? |
false |
位置? |
1 |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
-InitializationScript <scriptblock>
指定在工作啟動之前執行的命令。請以大括號 ( { } ) 括住命令以建立指令碼區塊。
請使用此參數來準備工作執行所在的工作階段。例如,您可以使用此參數,將函數、嵌入式管理單元和模組新增至工作階段。
必要? |
false |
位置? |
2 |
預設值 |
無 |
接受管線輸入? |
false |
接受萬用字元? |
false |
-InputObject <psobject>
指定命令的輸入。請輸入包含物件的變數,或輸入可產生物件的命令或運算式。
請在 ScriptBlock 參數的值中使用 $input 自動變數,以表示輸入物件。
必要? |
false |
位置? |
named |
預設值 |
|
接受管線輸入? |
true (ByValue) |
接受萬用字元? |
false |
-Name <string>
指定新工作的好記名稱。您可以使用這個名稱讓其他工作 Cmdlet (例如 Stop-Job) 識別此工作。
預設的好記名稱是 Job#,其中 "#" 是隨著每一項工作遞增的序數。
必要? |
false |
位置? |
named |
預設值 |
Job<編號> |
接受管線輸入? |
true (ByPropertyName) |
接受萬用字元? |
false |
-RunAs32
在 32 位元處理序中執行此工作。
請使用此參數來強制工作在 64 位元作業系統上的 32 位元處理序中執行。
必要? |
false |
位置? |
named |
預設值 |
False |
接受管線輸入? |
false |
接受萬用字元? |
false |
-ScriptBlock <scriptblock>
指定要在背景工作中執行的命令。請以大括號 ( { } ) 括住命令以建立指令碼區塊。此參數為必要項。
必要? |
true |
位置? |
1 |
預設值 |
|
接受管線輸入? |
false |
接受萬用字元? |
false |
<CommonParameters>
這個 Cmdlet 支援一般參數:-Verbose、-Debug、-ErrorAction、-ErrorVariable、-OutBuffer 和 -OutVariable。如需詳細資訊,請參閱 about_Commonparameters.
輸入和輸出
輸入型別是可經由管道輸出至 Cmdlet 的物件型別。傳回型別則是 Cmdlet 所傳回的物件型別。
輸入 |
System.String 您可以經由管道將檔案路徑輸出至 Start-Job。 |
輸出 |
System.Management.Automation.RemotingJob Start-Job 會傳回代表它所啟動之工作的物件。 |
附註
為了在背景中執行,Start-Job 會在目前工作階段內其個別工作階段中執行。當您使用 Invoke-Command Cmdlet 在遠端電腦的工作階段中執行 Start-Job 命令時,Start-Job 會在遠端工作階段內的工作階段中執行。
範例 1
C:\PS>start-job -scriptblock {get-process}
C:\PS> start-job -command "get-process"
Id Name State HasMoreData Location Command
--- ---- ----- ----------- -------- -------
1 Job1 Running True localhost get-process
描述
-----------
這個命令會啟動執行 Get-Process 命令的背景工作。它會傳回內含工作相關資訊的工作物件。命令提示會立即傳回,讓您能夠在工作於背景中執行時,在工作階段中執行作業。
範例 2
C:\PS>$jobWRM = invoke-command -computerName (get-content servers.txt) -scriptblock {get-service winrm} -jobname WinRM -throttlelimit 16 -AsJob
描述
-----------
這個命令會使用 Invoke-Command Cmdlet 及其 AsJob 參數,在多部電腦啟動執行 "get-service winrm" 命令的背景工作。因為此命令是在網路流量極大的伺服器執行,所以它會使用 Invoke-Command 的 ThrottleLimit 參數,將並行命令的數目限制為 16 個。
這個命令會使用 ComputerName 參數來指定執行工作的電腦。ComputerName 參數的值是 Get-Content 命令,這個命令會取得 Servers.txt 檔案 (網域中電腦名稱的檔案) 中的文字。
這個命令會使用 ScriptBlock 參數來指定命令,並使用 JobName 參數來指定工作的好記名稱。
範例 3
C:\PS>$j = start-job -scriptblock {get-eventlog -log system} -credential domain01\user01
C:\PS> $j | format-list -property *
HasMoreData : True
StatusMessage :
Location : localhost
Command : get-eventlog -log system
JobStateInfo : Running
Finished : System.Threading.ManualResetEvent
InstanceId : 2d9d775f-63e0-4d48-b4bc-c05d0e177f34
Id : 1
Name : Job1
ChildJobs : {Job2}
Output : {}
Error : {}
Progress : {}
Verbose : {}
Debug : {}
Warning : {}
StateChanged :
C:\PS> $j.JobStateInfo.state
Completed
C:\PS> $results = receive-job -job $j
C:\PS> $results
Index Time Type Source EventID Message
----- ---- ---- ------ ------- -------
84366 Feb 18 19:20 Information Service Control M... 7036 The description...
84365 Feb 18 19:16 Information Service Control M... 7036 The description...
84364 Feb 18 19:10 Information Service Control M... 7036 The description...
...
描述
-----------
這些命令會管理在 [事件檢視器] 中,從系統記錄檔取得所有事件的背景工作。該工作是在本機電腦執行。
第一個命令會使用 Start-Job Cmdlet 啟動工作。它使用 Credential 參數指定有權在電腦上執行此工作之使用者的使用者帳戶,然後再將 Start-Job 傳回的工作物件儲存在 $j 變數中。
此時,您可以在等待工作完成期間繼續執行其他作業。
第二個命令會使用管線運算子 (|),將 $j 中的工作物件傳遞給 Format-List Cmdlet。Format-List 命令會使用值為 * (所有) 的 Property 參數,在清單中顯示工作物件的所有屬性。
第三個命令會顯示 JobStateInfo 屬性的值,其中包含工作的狀態。
第四個命令會使用 Receive-Job Cmdlet 取得工作結果。它會將結果儲存在 $results 變數中。
最後一個命令會顯示 $results 變數的內容。
範例 4
C:\PS>start-job -filepath c:\scripts\sample.ps1
描述
-----------
這個命令會將 Sample.ps1 指令碼當做背景工作來執行。
範例 5
C:\PS>start-job -name WinRm -scriptblock {get-process winrm}
描述
-----------
這個命令會在本機電腦執行取得 WinRM 處理序的背景工作。它會使用 ScriptBlock 參數來指定在背景工作中執行的命令,並使用 Name 參數指定新工作的好記名稱。
範例 6
C:\PS>start-job -name GetMappingFiles -initializationScript {import-module MapFunctions} -scriptblock {Get-Map -name * | set-content D:\Maps.tif} -runAs32
描述
-----------
這個命令會啟動收集大量資料的工作並將它儲存在 .tif 檔案中。此命令會使用 InitializationScript 參數來執行匯入所需模組的指令碼區塊。此外,它也會使用 RunAs32 參數,在 32 位元處理序中執行此工作,即使電腦具有 64 位元作業系統也一樣。
請參閱
概念
about_Jobs
about_Job_Details
about_remote_jobs
Get-Job
Receive-Job
Wait-Job
Stop-Job
Remove-Job
Invoke-Command