【问题标题】:Get storage account of Azure VM获取 Azure VM 的存储帐户
【发布时间】:2015-05-13 21:40:39
【问题描述】:

我正在尝试查找 PowerShell cmdlet,它可以检索有关 Azure VM 使用的存储帐户的信息。 例如,我想提供 VM 的名称,并且想查看该 VM 使用的存储。或者查询特定的存储帐户并查看哪些 VM 使用此存储帐户也很好。

我正在尝试使用 cmdlet,但看不到有关存储帐户的详细信息:

Select-AzureSubscription -SubscriptionName "name"
Get-AzureVM -Name "name" -ServiceName "name"

【问题讨论】:

    标签: powershell azure azure-virtual-machine azure-powershell


    【解决方案1】:

    Get-AzureDisk cmdlet 可能对您有用。这是我正在使用的方法。

    $disk = Get-AzureDisk | Where-Object { $_.AttachedTo.RoleName -eq "YOURVMNAME" }
    $mediaLink = $disk.MediaLink
    $storageAccountName = $mediaLink.Host.Split('.')[0]
    

    https://msdn.microsoft.com/en-us/library/azure/dn495125.aspx

    【讨论】:

    • 请注意,您可能需要在 Get-AzureDisk cmdlet 中更准确 - 如果是这样,请务必检查 HostedServiceName 属性以及 AttachedTo。确保您获得了正确的磁盘。
    【解决方案2】:

    虚拟机的每个磁盘都将存储在给定的 blob 中,该 blob 的 uri 包含存储帐户名称。例如:

    https://mystorageaccount.blob.core.windows.net/vhds/myosdisk.vhd
    

    您需要从您的虚拟机中检索各种操作系统磁盘和数据磁盘 uri,然后相应地解析 uri。这是一种获取每个磁盘的存储帐户的方法,首先获取基本 uri (mystorageaccount.blob.core.windows.net),然后获取第一个字符串段(由点字符分隔)。

    对于操作系统磁盘:

    Get-AzureVM -ServiceName myservice -Name myvmname |
    GetAzureOSDisk |
    ForEach-Object { $_.MediaLink.Host.split(".")[0] }
    

    对于数据磁盘也是如此:

    Get-AzureVM -ServiceName myservice -Name myvmname |
    GetAzureDataDisk |
    ForEach-Object { $_.MediaLink.Host.split(".")[0] }
    

    如果您将同一个存储帐户用于多个磁盘,您将获得重复的存储帐户名称。

    【讨论】:

    • myosdisk.vhd 是存储帐户名称吗?
    【解决方案3】:

    我正在回答你问题的第二部分。您需要特定存储帐户下的 VM 列表。假设您的存储帐户名称为“xyz123”,并且您想要列出此存储帐户下的所有 vm。然后你只需要运行下面给出的脚本-

    $vms = Get-AzureVM
    $output = " "
    $tgtStorageaccount = "xyz123"
    
    foreach($vm in $vms)
    {
      $disk = Get-AzureVM -ServiceName $vm.ServiceName –Name $vm.Name | Get-AzureOSDisk
      $mediaLink = $disk.MediaLink
      $storageAccountName = $mediaLink.Host.Split('.')[0]
    
      if ($storageAccountName -eq $tgtStorageaccount)
      {
        $output  =$output + "`r`n" + $vm.Name 
      }
    }
    $output
    

    希望这篇文章对您有所帮助。谢谢。

    【讨论】:

      【解决方案4】:

      是的。 Storageaccount 可用于基于 RM 的 VM。

      对于操作系统:

      $output = Get-AzureRmVM -ResourceGroupName "xx-RG-xx-DEv" -Name "xx-xx-vm-DEV"
      $storageAccountName = $output.StorageProfile.OsDisk.Vhd.Uri.Split("/")[2].Split(".")[0]
      Get-AzureRmStorageAccount -StorageAccountName $storageAccountName -ResourceGroupName "xx-RG-xx-DEv"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-17
        • 2017-05-01
        • 2016-09-28
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多