PowerShell中查看作业及事件订阅错误
PowerShell中查看作业及事件订阅错误
PowerShell 中查看作业及事件订阅错误
在 PowerShell 中查看事件监控任务(通过 Register-ObjectEvent
或 Start-Job
创建)的失败信息,可按以下步骤操作:
1. 使用 **Receive-Job
获取详细错误**
若任务由 Start-Job
或事件注册创建,使用 Receive-Job
命令获取输出和错误流:
1
2
3
4
5
6
7
8
9
10
11
\# 获取所有作业
Get-Job
\# 获取指定作业的错误信息(替换 ID 为实际作业 ID)
\$job = Get-Job -Id <作业ID>
\$job | Receive-Job -ErrorAction SilentlyContinue # 标准输出
\$job | Receive-Job -Error # 错误输出
若作业已完成,可使用 -Keep
参数保留错误信息以便后续查看:
1
Receive-Job -Id <作业ID> -Keep -Error
2. 检查 **$Error
变量**
PowerShell 会将最近的错误保存在全局变量 $Error
中:
1
2
3
4
5
6
7
\# 获取最近的错误
\$Error\[0]
\# 获取所有错误的摘要
\$Error | Select-Object Exception, ErrorRecord, InvocationInfo
3. 查看作业的 **JobStateInfo
属性**
每个作业对象都包含 JobStateInfo
属性,其中可能包含失败原因:
1
2
3
\$job = Get-Job -Id <作业ID>
\$job.JobStateInfo.Reason
4. 检查事件订阅的错误
若任务是通过 Register-ObjectEvent
创建的事件订阅,使用 Get-EventSubscriber
和 Get-Event
命令:
1
2
3
4
5
6
7
8
9
\# 获取所有事件订阅
Get-EventSubscriber
\# 获取指定事件的详细信息(替换 ID 为实际订阅 ID)
\$subscriber = Get-EventSubscriber -SubscriptionId <订阅ID>
\$subscriber | Get-Event | Select-Object \*
5. 使用 **Get-History
查看命令历史**
若错误发生在交互式会话中,可查看命令历史及输出:
1
Get-History | Select-Object CommandLine, StartExecutionTime, EndExecutionTime
6. 启用详细日志记录
在脚本中添加详细输出或日志记录:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
\# 在脚本中添加错误捕获
try {
  \# 可能出错的代码
} catch {
  Write-Error "错误: $\_"
  $\_ | Out-File "C:\script\_errors.log" -Append
}
\# 启用详细流
\$VerbosePreference = "Continue"
Write-Verbose "正在执行操作..."
示例:完整的错误检查流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
\# 获取所有作业
\$jobs = Get-Job
\# 遍历作业并输出错误信息
foreach (\$job in \$jobs) {
  Write-Host "作业 ID: \$(\$job.Id), 状态: \$(\$job.State)" -ForegroundColor Yellow
   
  if (\$job.State -eq "Failed") {
  Write-Host "错误信息:" -ForegroundColor Red
  \$job | Receive-Job -Error | ForEach-Object {
  "$\_"
  }
  Write-Host "------------------------"
  }
}
注意事项
作业完成后错误可能丢失:若作业已自动清理(如使用
-AutoRemoveJob
参数),错误信息可能无法恢复。远程作业:若作业在远程会话中运行,需使用
Invoke-Command
获取远程错误信息。事件日志:部分错误可能记录在 Windows 事件日志中,可通过
Get-WinEvent
命令查看。
通过以上方法,可定位并解决 PowerShell 作业执行失败的问题。
(注:文档部分内容可能由 AI 生成)
本文由作者按照 CC BY 4.0 进行授权