PowerShell Start-Job 增量

8

我很好奇为什么Start-Job每次增加2。我担心的是我做错了什么使得新作业的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吗?


我提供更多的细节。 - JPBlanc
2个回答

10
每次启动任务时,它由一个父任务和一个或多个子任务组成。如果运行 get-job | fl 命令,您将看到子任务,并且您会发现它们的名称是“缺失”的奇数编号名称。

我看到了:- Id:2 名称:Job2 子作业:{Job3} - Guy Thomas

7

@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}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接