2014-03-03 135 views
7

我很好奇爲什麼Start-Job增量爲兩個。我擔心的是我的2PowerShell啓動作業增量

Start-Job -ScriptBlock {Get-WinEvent -LogName system -MaxEvents 1000} 

結果做錯了什麼,使一個新的工作跳躍的ID如由Get-工作

Id Name State  HasMoreData Command                                          
-- ---- -----  ----------- -------                                          
2 Job2 Completed  False Get-WinEvent -LogName system -MaxEvents 1000                                 
4 Job4 Completed  False Get-WinEvent -LogName system -MaxEvents 1000                                 
6 Job6 Completed  True Get-WinEvent -LogName system -MaxEvents 1000 

問:你能控制的開始 - 工作ID增加,或迫使他們只是1?

+0

我給出了一些更多的細節。 – JPBlanc

回答

10

每次開始作業時,它都由父作業和一個或多個子作業組成。如果您運行get-job | fl,您會看到孩子的工作,並且您會看到他們的姓名是「缺少」奇數編號的姓名。

+0

我看到: - Id:2 姓名:Job2 ChildJobs:{Job3} –

5

@ 1.618得到正​​確的答案,這裏有一些更多的細節:

Start-Job -ScriptBlock {Get-Process} 

Id  Name   PSJobTypeName State   HasMoreData  Location    Command     
--  ----   ------------- -----   -----------  --------    -------     
2  Job2   BackgroundJob Running  True   localhost   Get-Process 

Get-Job | fl * 


State   : Completed 
HasMoreData : True 
StatusMessage : 
Location  : localhost 
Command  : Get-Process 
JobStateInfo : Completed 
Finished  : System.Threading.ManualResetEvent 
InstanceId : 49a67ca4-840b-49ec-b293-efa9303e38bb 
Id   : 2 
Name   : Job2 
ChildJobs  : {Job3} 
PSBeginTime : 03/03/2014 20:43:54 
PSEndTime  : 03/03/2014 20:44:00 
PSJobTypeName : BackgroundJob 
Output  : {} 
Error   : {} 
Progress  : {} 
Verbose  : {} 
Debug   : {} 
Warning  : {} 

get-job -IncludeChildJob 

Id  Name   PSJobTypeName State   HasMoreData  Location    Command     
--  ----   ------------- -----   -----------  --------    -------     
2  Job2   BackgroundJob Completed  True   localhost   Get-Process    
3  Job3       Completed  True   localhost   Get-Process 

這是爲什麼,當你開始工作,PowerShell中創建兩個工作?

通過Start-Job創建的Windows PowerShell作業始終由父作業和子作業組成。孩子的工作是做實際的工作。如果您通過使用Invoke-Command及其–AsJob參數針對多臺遠程計算機運行作業,則每臺遠程計算機都會有一個子作業。

當您管理作業時,您對父作業執行的任何操作都會自動應用於任何子作業。刪除或停止父作業對子作業執行相同的操作。獲取父作業的結果意味着您可以獲得所有子作業的結果。

您可以訪問孩子的作業直接檢索他們的數據,NA簡單的工作,如在本例中,您可以通過父母或子女的工作訪問數據:

Receive-Job -Id 2 -Keep 
Receive-Job -Id 3 -Keep 

當你有多個子作業,它通常更容易依次訪問子作業:

$jobs = Get-Job -Name Job2 | select -ExpandProperty ChildJobs 
foreach ($job in $jobs){Receive-Job -Job $job -Keep}