如何在Windows Server 2012/R2通过PowerShell获取WindowsServerBackup完整信息?
解决Windows Server 2012/2012 R2中PowerShell获取完整备份结果的方法
你之前尝试的方向其实都没错,只是可能没用到正确的参数、日志源或者属性解析方式。下面是几个能完整获取备份状态、卷信息和错误详情的可靠方案:
方法1:用Get-WBJob直接读取备份作业记录
Get-WBJob默认只显示正在运行的作业,要获取历史备份记录必须加上-Previous参数。它返回的对象里包含了你需要的核心信息:
# 获取最新的1次备份作业记录 $latestBackup = Get-WBJob -Previous 1 # 整理成易读的结构化结果 $backupReport = [PSCustomObject]@{ 备份启动时间 = $latestBackup.StartTime 备份状态 = switch ($latestBackup.JobState) { 1 { "成功完成" } 2 { "失败" } 3 { "已取消" } default { "未知状态/运行中" } } 备份源卷 = $latestBackup.SourceVolumes | Select-Object -ExpandProperty VolumePath 备份目标卷 = $latestBackup.BackupTargetVolumes | Select-Object -ExpandProperty VolumePath 错误详情 = if ($latestBackup.JobState -eq 2) { $latestBackup.ErrorDescription } else { "无" } } # 输出结果 $backupReport
注意:不管是手动触发还是计划任务执行的备份,Get-WBJob都能捕获到记录,前提是你用管理员权限运行PowerShell。
方法2:通过Get-WinEvent读取备份专属日志
Windows Server Backup的详细日志存放在Microsoft-Windows-Backup/Operational事件日志中,这里的信息比Get-WBJob更细致,尤其是错误场景下的堆栈和上下文信息:
# 获取最新的备份结果事件(成功事件ID=4,失败事件ID=5) $latestBackupEvent = Get-WinEvent -LogName "Microsoft-Windows-Backup/Operational" -FilterXPath "*[System[(EventID=4 or EventID=5)]]" -MaxEvents 1 # 解析关键信息 $status = if ($latestBackupEvent.Id -eq 4) { "成功" } else { "失败" } $sourceVolumes = $latestBackupEvent.Properties[2].Value $targetVolume = $latestBackupEvent.Properties[3].Value $detailMessage = $latestBackupEvent.Message # 输出结构化结果 [PSCustomObject]@{ 事件发生时间 = $latestBackupEvent.TimeCreated 备份状态 = $status 备份源卷 = $sourceVolumes 备份目标 = $targetVolume 详细日志 = $detailMessage }
**为什么之前用Get-Eventlog没效果?**因为Get-Eventlog只能访问传统的系统/应用日志,而Microsoft-Windows-Backup/Operational是新式事件日志,必须用Get-WinEvent才能读取。
方法3:WMI/CIM查询(跨版本兼容方案)
如果需要更底层的访问方式,可以使用root\Microsoft\Windows\Backup命名空间下的CIM类:
# 获取最新的备份作业记录 $latestWmiJob = Get-CimInstance -Namespace "root\Microsoft\Windows\Backup" -ClassName "WBJob" | Sort-Object -Property StartTime -Descending | Select-Object -First 1 # 整理结果 [PSCustomObject]@{ 开始时间 = $latestWmiJob.StartTime 结束时间 = $latestWmiJob.EndTime 备份状态 = switch ($latestWmiJob.JobState) { 1 { "成功" } 2 { "失败" } 3 { "已取消" } default { "运行中" } } 源卷列表 = $latestWmiJob.SourceVolumes | ForEach-Object { $_.VolumePath } 目标存储 = $latestWmiJob.BackupTarget.VolumePath 错误详情 = $latestWmiJob.Error }
常见误区提醒:
- 必须以管理员权限运行PowerShell,否则
Get-WBJob和WMI查询会返回空结果或权限错误。 - 如果是网络共享目标的备份,
BackupTargetVolumes会显示为网络路径而非本地卷,需要注意解析逻辑。
内容的提问来源于stack exchange,提问作者keisuke
相关产品推荐
相关产品推荐

