我想在PowerShell作业成功完成时运行脚本。但如何找出使用Start-Job
cmdlet启动的作业的所有可能事件?
下面是一个例子:
$myjob = Start-Job { Get-ChildItem }
$jobEvent = Register-ObjectEvent -InputObject $myjob -EventName StateChanged -Action {
Write-Host 'Job has completed'
}
从堆栈溢出的其他一些例子中,我知道有StateChanged
事件,但它只告诉一个作业的状态发生了变化,是否有任何事件会告诉作业失败或成功完成?
如何获得此类事件的列表?除了StateChanged
之外还有其他事件吗?
或者,代码是否必须在接收到StateChanged
事件后使用Get-Job
检查作业,以确定作业的实际状态?
1条答案
按热度按时间yyyllmsg1#
StateChanged
是Job
Class中您可以订阅的唯一事件,但对于您要完成的任务来说,它已经足够了。在事件的
Action
块中,有不同的自动变量在事件触发时自动填充:$Event
、$EventArgs
、$args
、$EventSubscriber
和$Sender
,可用于确定作业是否成功完成。有关详细信息,请参阅about Automatic Variables。在这种情况下,我认为您可以使用作业中的
JobState.State
属性,并检查它是否等于Completed
。您还可以在失败时检查.Reason
属性,尽管此属性可能并不总是被填充。