You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何跨多台服务器批量检查所有Veeam备份作业状态

跨多台服务器批量检查Veeam备份作业状态实现方案

前置要求

  • 运行脚本的机器可通过网络正常访问所有目标服务器(示例为SRV1、SRV2、SRV3)
  • 脚本运行账号对所有目标服务器具备Veeam备份管理员权限、PowerShell远程访问权限
  • 所有目标服务器已安装Veeam Backup & Replication PowerShell管理模块

实现逻辑

通过PowerShell远程执行能力遍历所有目标服务器,在每台服务器本地运行原有备份状态检查逻辑,最后汇总所有结果输出。同时修复了原脚本的逻辑缺陷:原脚本遍历备份作业时未按作业ID关联匹配对应会话,会导致每个作业条目下重复输出全量作业的会话记录。

最终可用脚本

# 配置需要检查的目标VBR服务器列表
$targetServers = @("SRV1", "SRV2", "SRV3")
# 配置检查时间范围:过去24小时
$timeThreshold = (Get-Date).AddHours(-24)
# 汇总结果存储容器
$totalResult = @()

foreach ($srv in $targetServers) {
    Write-Host "`n===== 开始检查服务器 $srv 备份状态 =====" -ForegroundColor Cyan
    try {
        # 远程调用目标服务器执行检查逻辑
        $srvBackupData = Invoke-Command -ComputerName $srv -ScriptBlock {
            param($threshold)
            # 加载Veeam PowerShell管理单元
            Add-PSSnapin VeeamPSSnapin -ErrorAction Stop
            $allJobSessions = Get-VBRComputerBackupJobSession
            $jobCheckResult = @()
            # 遍历所有备份作业匹配对应会话
            foreach ($job in Get-VBRComputerBackupJob) {
                $matchedSessions = $allJobSessions | Where-Object {
                    $_.JobId -eq $job.Id -and $_.CreationTime -ge $threshold
                } | Sort-Object CreationTime | Select CreationTime, EndTime, Result, State
                $jobCheckResult += [PSCustomObject]@{
                    BelongServer = $env:COMPUTERNAME
                    JobName = $job.Name
                    SessionRecords = $matchedSessions
                }
            }
            return $jobCheckResult
        } -ArgumentList $timeThreshold -ErrorAction Stop

        # 控制台格式化输出当前服务器结果
        foreach ($job in $srvBackupData) {
            Write-Host "`n------------ 备份作业名: $($job.JobName) | 所属服务器: $($job.BelongServer) ------------"
            $job.SessionRecords | Format-Table -AutoSize
            $totalResult += $job
        }
    }
    catch {
        Write-Warning "连接服务器 $srv 失败,错误信息: $_"
    }
}

# 如需导出汇总结果为CSV文件,可取消以下行注释
# $totalResult | Select-Object BelongServer, JobName, @{n="LastBackupResult";e={$_.SessionRecords | Select-Object -Last 1 -ExpandProperty Result}}, @{n="LastBackupTime";e={$_.SessionRecords | Select-Object -Last 1 -ExpandProperty CreationTime}} | Export-Csv -Path "Veeam备份状态汇总_$(Get-Date -Format 'yyyyMMdd').csv" -NoTypeInformation -Encoding UTF8

配置说明

  • 首次使用需在每台目标服务器上以管理员身份执行Enable-PSRemoting -Force,开启PowerShell远程访问权限
  • 若运行脚本的机器和目标服务器不在同一域,需在脚本运行机器上执行以下命令添加信任主机:
    Set-Item WSMan:\localhost\Client\TrustedHosts -Value "SRV1,SRV2,SRV3" -Concatenate
    
  • 脚本默认在控制台格式化输出结果,可根据需要开启CSV导出功能,方便存档或上报。

内容的提问来源于stack exchange,提问作者StackBuck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:06:20