PowerShell启动作业增量

时间:2014-03-03 17:55:46

标签: powershell powershell-v2.0 powershell-v3.0

我很好奇为什么Start-Job增加了两个。我担心的是我做错了什么使得新工作的ID跳了2。

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

Get-Job

显示的结果
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  

问题:您可以控制Start-Job Id增量,还是强制它们只是1?

2 个答案:

答案 0 :(得分:10)

每次开始工作时,它都包含父工作和一个或多个子工作。如果您运行get-job | fl,您将看到子作业,并且您会看到他们的名字是“缺少的”奇数名称。

答案 1 :(得分: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参数对多个远程计算机运行作业,则每个远程计算机将获得一个子作业。

管理作业时,您对父作业执行的任何操作都会自动应用于任何子作业。删除或停止父作业会对子作业执行相同的操作。获取父作业的结果意味着您将获得所有子作业的结果。

您可以直接访问子作业以检索其数据,这是一项简单的工作,例如,您可以通过父作业或子作业访问数据:

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}