获取Azure VM的存储帐户

时间:2015-03-11 21:33:32

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

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

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

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

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我正在回答你问题的第二部分。您需要特定存储帐户下的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

希望这个会帮助你。感谢。

答案 2 :(得分:1)

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

对于操作系统:

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

答案 3 :(得分:0)

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

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

您需要从vm中检索各种os磁盘和数据磁盘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] }

如果您为多个磁盘使用相同的存储帐户,则会获得重复的存储帐户名称。