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

PowerShell嵌套数组与循环实现Veeam备份恢复检查脚本优化

优化Veeam备份恢复检查脚本的数组设计与循环实现

一、推荐数据结构:自定义对象数组(替代嵌套数组)

嵌套数组可读性差,直接用自定义对象关联服务器、备份作业、磁盘信息更清晰,每个对象封装单台服务器的所有关联数据。

创建数据结构示例

# 初始化空数组存储服务器-磁盘映射
$serverDiskMap = @()

# 手动添加服务器数据(实际可从Veeam自动提取)
$serverDiskMap += [PSCustomObject]@{
    ServerName = "ServerA"
    BackupJobs = @("Job1", "Job3")
    Disks      = @("C:", "D:", "E:")
}
$serverDiskMap += [PSCustomObject]@{
    ServerName = "ServerB"
    BackupJobs = @("Job2", "Job4")
    Disks      = @("C:", "F:")
}
# 其他服务器依次添加...

二、循环处理逻辑:按服务器遍历,再遍历磁盘

先遍历每个服务器对象,处理完该服务器的所有磁盘后,再切换到下一台服务器,完全匹配你的需求。

循环实现示例

foreach ($server in $serverDiskMap) {
    Write-Host "=== 开始处理服务器: $($server.ServerName) ==="
    
    # 遍历当前服务器的所有磁盘
    foreach ($disk in $server.Disks) {
        Write-Host "正在检查服务器 $($server.ServerName) 的磁盘: $disk"
        
        # 替换为你的Veeam恢复检查逻辑,示例:
        # 1. 查找对应备份点
        # $restorePoints = Get-VBRBackup -Name $server.BackupJobs | Get-VBRRestorePoint -Name $server.ServerName -Disk $disk
        # 2. 执行恢复验证
        # Test-VBRRestorePoint -RestorePoint $restorePoints
    }
    
    Write-Host "=== 服务器 $($server.ServerName) 所有磁盘处理完成 ==="
    Write-Host ""
}

三、从Veeam作业自动提取数据(替代手动维护)

手动创建对象效率低,直接通过Veeam PowerShell命令自动聚合服务器、作业、磁盘信息:

# 获取目标备份作业
$targetJobs = Get-VBRJob -Name "Job1", "Job2", "Job3", "Job4", "Job5", "Job6", "Job7"

# 按服务器分组,聚合所属作业与磁盘
$serverDiskMap = $targetJobs | ForEach-Object {
    $currentJob = $_
    # 提取作业内的服务器及磁盘信息
    $currentJob.GetObjectsInJob() | ForEach-Object {
        [PSCustomObject]@{
            ServerName = $_.Name
            BackupJob  = $currentJob.Name
            Disks      = $_.GetDisks() | Select-Object -ExpandProperty Name
        }
    }
} | Group-Object -Property ServerName | ForEach-Object {
    [PSCustomObject]@{
        ServerName = $_.Name
        BackupJobs = $_.Group.BackupJob | Select-Object -Unique
        Disks      = $_.Group.Disks | Select-Object -Unique
    }
}

这段代码会自动合并跨多个作业的服务器数据,无需手动维护映射关系。

四、额外效率优化提示

  • 预缓存Veeam对象:避免在循环内反复调用Get-VBR*命令,先一次性把所有备份点、作业信息存入变量。
  • 并行处理(可选):PowerShell 7+可使用ForEach-Object -Parallel并行处理不同服务器,注意控制并发数避免触发Veeam限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:40:25