我想在 PowerShell 作业成功完成时运行脚本。但是,如何找出使用 Start-Job
cmdlet 启动的作业的所有可能事件?
这是一个例子:
$myjob = Start-Job { Get-ChildItem }
$jobEvent = Register-ObjectEvent -InputObject $myjob -EventName StateChanged -Action {
Write-Host 'Job has completed'
}
因此,从 Stack Overflow 上的其他一些示例中,我知道存在 StateChanged
事件,但它仅表明作业的状态已更改。是否有任何事件表明作业已失败或成功完成?
如何获取此类事件的列表?除了StateChanged
之外还有其他事件吗?
或者代码是否必须在收到 StateChanged
事件后使用 Get-Job
检查作业以确定作业的实际状态?
最佳答案
StateChanged
是您可以订阅 Job
Class 的唯一事件,但这对于您想要实现的目标来说已经足够了。
在事件的 Action
block 中,有不同的自动变量会在事件触发时自动填充:$Event
、$EventArgs
、 $args
、$EventSubscriber
和 $Sender
您可以使用它们来确定您的作业是否成功完成。请参阅about Automatic Variables了解更多详情。
在这种情况下,我相信您可以使用 JobState.State
Property从你的工作中检查它是否等于 Completed
。您还可以检查 .Reason
属性,以防失败,尽管该属性可能并不总是被填充。
$jobEvent = Register-ObjectEvent -InputObject $myjob -EventName StateChanged -Action {
switch($EventArgs.JobStateInfo.State) {
Completed { Write-Host ('Job [{0}] completed successfully.' -f $sender.InstanceId) -ForegroundColor Green }
Failed { Write-Host ('Job [{0}] failed.' -f $sender.InstanceId) -ForegroundColor Red }
Default { <# something else here, enum has many possible states #> }
}
}
关于windows - 以 Start-Job 开始的 PowerShell 作业的事件名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75277681/