powershell - 当项目存在时,Get-AzureRmRecoveryServicesBackupItem 不返回任何内容

标签 powershell azure

我正在尝试使用“即用即付”订阅中的恢复服务保管库进行 Azure 资源管理器备份和还原。我使用的是非常简单的代码,据我所知,它是来自 MS 文档的。我可以获取保管库对象,也可以获取容器,但是当我尝试从任何容器中获取任何项目时,Get-AzureRmRecoveryServicesBackupItem 始终不会返回任何内容,即使我知道其中有项目并且 Azure RM GUI 也确认了这一点。 “不返回任何内容”意味着如果我将结果分配给一个变量,它是空/空,并且如果我尝试输出到控制台,则没有输出。

我使用两个不同的订阅、不同的保管库、虚拟机和备份项目以及来自两台不同的计算机得到了相同的结果。我在一台机器上重新安装了模块,并在另一台机器上从头开始安装了模块。使用 Get-AzureRmRecoveryServicesBackupItem 命令的 -Debug 开关似乎会显示返回的项目,结果正常且没有错误。 Powershell 代码显示在下面,-Debug 输出显示在其后。更重要的是,这个确切的代码在 2017 年 2 月 7 日有效,不是开玩笑。我现在已经没有想法了,所以任何帮助将不胜感激。

更新:我们发现,当我们对 Get-AzureRmRecoveryServicesBackupContainer 使用 -FriendlyName 参数时,会出现问题,但如果我们通过 | 管道输出Where-Object { $_.FriendlyName -eq $vmName } 不会出现该问题。我们已向 MSFT 立案。

$vaultName = 'somevault'
$resourceGroupName = 'somerg'
$vmName = 'testvm'

$vault = Get-AzureRmRecoveryServicesVault -Name $vaultName -ResourceGroupName $resourceGroupName;
Set-AzureRmRecoveryServicesVaultContext -Vault $vault

$container = Get-AzureRmRecoveryServicesBackupContainer  -ContainerType AzureVM –Status Registered -FriendlyName $vmName
#output of this cmdlet is empty
Get-AzureRmRecoveryServicesBackupItem –Container $container  -Debug

调试输出:

DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
OK

Headers:
Pragma                        : no-cache
x-ms-request-id               : xxx
x-ms-client-request-id        : xxx
Strict-Transport-Security     : max-age=31536000; includeSubDomains
x-ms-ratelimit-remaining-subscription-reads: 14930
x-ms-correlation-request-id   : xxx
x-ms-routing-request-id       : WESTUS:xxx
Cache-Control                 : no-cache
Date                          : Sat, 11 Feb 2017 19:39:07 GMT
Server                        : Microsoft-IIS/8.0
X-Powered-By                  : ASP.NET

Body:

{
  "value": [
    {
      "id": "/Subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/VS-xxxxxxxxxxxxx-Group/providers/Microsoft.RecoveryServices/vaults/vault273/backupFabrics/Azure/protectionContainers/IaasVM
Container;iaasvmcontainerv2;VS-xxxxxxxxxxxxx-Group;testvm/protectedItems/VM;iaasvmcontainerv2;VS-xxxxxxxxxxxxx-Group;testvm",
      "name": "iaasvmcontainerv2;VS-xxxxxxxxxxxxx-Group;testvm",
      "type": "Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems",
      "properties": {
        "friendlyName": "testvm",
        "virtualMachineId": "/subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/VS-xxxxxxxxxxxxx-Group/providers/Microsoft.Compute/virtualMachines/testvm",
        "protectionStatus": "Healthy",
        "protectionState": "Protected",
        "healthStatus": "Passed",
        "healthDetails": [
          {
            "code": 400239,
            "title": "IaasVmHealthGreenDefault",
            "message": "Backup pre-check status of this virtual machine is OK.",
            "recommendations": []
          }
        ],
        "lastBackupStatus": "Completed",
        "lastBackupTime": "2017-02-11T15:11:12.2071619Z",
        "protectedItemDataId": "70368936803029",
        "protectedItemType": "Microsoft.Compute/virtualMachines",
        "backupManagementType": "AzureIaasVM",
        "workloadType": "VM",
        "containerName": "iaasvmcontainerv2;VS-xxxxxxxxxxxxx-Group;testvm",
        "sourceResourceId": "/subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/VS-xxxxxxxxxxxxx-Group/providers/Microsoft.Compute/virtualMachines/testvm",
        "policyId": "/Subscriptions/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/VS-xxxxxxxxxxxxx-Group/providers/Microsoft.RecoveryServices/vaults/vault273/backupPolicies/DailyPolicy",
        "policyName": "DailyPolicy",
        "lastRecoveryPoint": "2017-02-11T15:12:16.7410628Z"
      }
    }
  ]
}


DEBUG: AzureQoSEvent: CommandName - Get-AzureRmRecoveryServicesBackupItem; IsSuccess - True; Duration - 00:00:02.3527163; Exception - ;

最佳答案

遇到了同样的问题(也在不同的电脑上),并通过传递不同的参数集解决了这个问题。我没有使用 Get-AzureRmRecoveryServicesBackupContainer 来获取对容器的引用。相反,我直接使用容器名称调用 Get-AzureRmRecoveryServicesBackupItem。仅当您传递参数 -BackupManagementType AzureVM 时,这才有效。

Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId <myguid>

Get-AzureRmRecoveryServicesVault -Name "myvaultname" | Set-AzureRmRecoveryServicesVaultContext
$item = Get-AzureRmRecoveryServicesBackupItem -BackupManagementType AzureVM -WorkloadType AzureVM -Name "myname"
$latestRecoveryPoint = Get-AzureRmRecoveryServicesBackupRecoveryPoint -Item $item | Sort-Object RecoveryPointTime -Descending | Select-Object -First 1

如果您省略 -Name,您将得到一个包含所有名称的列表。

关于powershell - 当项目存在时,Get-AzureRmRecoveryServicesBackupItem 不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42180637/

相关文章:

powershell - 如何在 Azure DevOps 中获取所有存储库

java - 在java应用程序中启动powershell脚本

azure - Azure 流分析中的限制事件

powershell - 如何循环遍历哈希表中的数组 - 根据从 CSV 文件读取的值传递参数

windows - 从 Console2 复制到剪贴板

Powershell - 使用模块编译

node.js - Azure 存储模拟器出现 Nodejs createQueueService 错误

SOX 合规性的 Azure DevOps 权限层次结构

Azure DevOps Pipeline - YAML 格式错误?

c# - .NET 7 中的 Azure Functions(独立)发布到 Azure,加载了 0 个函数