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

如何在PowerShell函数中传递多个Azure虚拟机资源名称参数

如何让Azure自动化Runbook的PowerShell磁盘恢复函数支持多个虚拟机名称?

要让你的DiskRestore函数支持批量处理多个虚拟机名称,只需要对参数定义和内部逻辑做一点简单调整,核心思路是让参数支持字符串数组,然后遍历每个虚拟机名称执行恢复操作。以下是具体的重构方案:

重构后的完整代码

function DiskRestore([string[]]$ResourceNames, $storageAccount) {
    try {
        # 遍历每个传入的虚拟机名称,逐个处理
        foreach ($resourceName in $ResourceNames) {
            Write-Output "开始处理虚拟机: $resourceName"
            
            # 保留你原有的资源获取逻辑,针对单个虚拟机执行
            $resources = Get-AzureRmResource -ResourceGroupName "samplerg" -ResourceName $resourceName
            
            # 这里保留你原有的恢复流程(比如获取恢复点、提交恢复任务等)
            # .....(原有的$rp获取逻辑)
            $restorejob = Restore-AzureRmRecoveryServicesBackupItem -RecoveryPoint $rp[0] -StorageAccountName $storageAccount -StorageAccountResourceGroupName "samplerg"
            
            Write-Output "虚拟机 $resourceName 的恢复任务已提交,JobID: $($restorejob.JobId)"
        }
    }
    catch {
        Write-Error "处理虚拟机时出错: $_"
    }
}

# 调用方式1:直接传入逗号分隔的多个虚拟机名称
DiskRestore -ResourceNames "samplevm01", "samplevm02" -storageAccount "samplesa01"

# 调用方式2:先定义数组再传入(适合批量处理大量虚拟机)
$vmList = @("samplevm01", "samplevm02", "samplevm03")
DiskRestore -ResourceNames $vmList -storageAccount "samplesa01"

关键改动说明

  • 参数类型调整:把原参数$ResourceName改为[string[]]$ResourceNames,明确指定它接受字符串数组类型,这样就能一次性传入任意数量的虚拟机名称。
  • 添加循环逻辑:在函数内部用foreach遍历每个虚拟机名称,将原有的单虚拟机恢复逻辑套入循环,确保每个虚拟机都能被独立处理。
  • 兼容原有逻辑:原有的资源查询、恢复任务提交等核心代码不需要大幅修改,只需要放到循环内部即可。

这样修改后,你就可以灵活地批量处理多个虚拟机的磁盘恢复操作,存储账户参数保持不变,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:28:44