获取 Azure VM 的存储帐户

Get storage account of Azure VM

我正在尝试查找 PowerShell cmdlet,它可以检索有关 Azure VM 使用的存储帐户的信息。 例如,我想提供 VM 的名称,我想查看 VM 使用哪个存储。或者查询具体的存储账户,看看哪些虚拟机使用了这个存储账户也不错。

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

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

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

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

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

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

对于 OS 磁盘:

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] }

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

我正在回答你问题的第二部分。您需要特定存储帐户下的 VM 列表。假设你的存储账户名称是"xyz123",你想列出这个存储账户下的所有虚拟机。那么你只需要运行下面给出的脚本-

$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

希望本文对您有所帮助。谢谢

是的。 Storageaccount 可以找到基于 RM 的 VM。

对于OS:

$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"