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

Azure PowerShell获取ASR复制保护项详情时遇类型转换错误求助

解决Azure PowerShell中Get-AzRecoveryServicesAsrProtectionContainer的类型转换错误

问题重现

你运行以下代码获取复制项详情时,在第5行遇到了类型转换错误:

$VaultName = 'Site-recovery-vault-westus'
$vault = Get-AzRecoveryServicesVault -Name $VaultName
Set-AzRecoveryServicesAsrVaultContext -Vault $vault
$fabric = Get-AzRecoveryServicesAsrFabric
$container = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $fabric
Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $container

错误信息:

Get-AzRecoveryServicesAsrProtectionContainer: Cannot convert 'System.Object[]' to the type 'Microsoft.Azure.Commands.RecoveryServices.SiteRecovery.ASRFabric' required by parameter 'Fabric'. Specified method is not supported.

原因分析

Get-AzRecoveryServicesAsrFabric这个命令如果你的恢复服务保管库中有多个fabric(比如多个本地站点或Azure区域),会返回一个对象数组(System.Object[])。但Get-AzRecoveryServicesAsrProtectionContainer的-Fabric参数只接受单个ASRFabric对象,直接传入数组就会触发类型不匹配的错误。

解决方案

根据你的实际场景,有几种处理方式:

1. 场景:只有一个Fabric

如果你的保管库中只有一个fabric,直接取数组的第一个元素即可:

$VaultName = 'Site-recovery-vault-westus'
$vault = Get-AzRecoveryServicesVault -Name $VaultName
Set-AzRecoveryServicesAsrVaultContext -Vault $vault
# 取第一个fabric对象
$fabric = Get-AzRecoveryServicesAsrFabric | Select-Object -First 1
$container = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $fabric
Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $container

2. 场景:有多个Fabric,指定目标Fabric名称

如果你知道要操作的fabric名称,直接通过-Name参数筛选出单个对象:

$VaultName = 'Site-recovery-vault-westus'
$targetFabricName = "你的Fabric名称" # 替换为实际的fabric名称
$vault = Get-AzRecoveryServicesVault -Name $VaultName
Set-AzRecoveryServicesAsrVaultContext -Vault $vault
$fabric = Get-AzRecoveryServicesAsrFabric -Name $targetFabricName
$container = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $fabric
Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $container

3. 场景:遍历所有Fabric获取容器

如果你需要处理所有fabric下的保护容器,可以用foreach循环遍历每个fabric:

$VaultName = 'Site-recovery-vault-westus'
$vault = Get-AzRecoveryServicesVault -Name $VaultName
Set-AzRecoveryServicesAsrVaultContext -Vault $vault
$fabrics = Get-AzRecoveryServicesAsrFabric

foreach ($fabric in $fabrics) {
    Write-Host "正在处理Fabric: $($fabric.Name)"
    $containers = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $fabric
    foreach ($container in $containers) {
        Write-Host "  获取容器 $($container.Name) 的复制项"
        $replicationItems = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $container
        # 在这里可以添加处理复制项的逻辑,比如输出或保存
        $replicationItems | Format-Table Name, ProtectionStatus
    }
}

验证提示

你可以先运行Get-AzRecoveryServicesAsrFabric | Format-Table Name, Type查看所有fabric的名称和类型,确认要操作的目标fabric信息,避免选错对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:47:37