有没有什么方法可以使用PowerShell获取所有VM的扩展属性而不仅仅是Get-azurermvm带来的属性? 我试图使用Select,但我不知道从哪里获取所有名称。门户网站上的那些工作没有工作(带回空字段) 如果我使用get-member,他们就不会带任何东西,因为我认为它们嵌套在里面......
答案 0 :(得分:1)
正如我在评论中提到的,这并非易事,因为Azure VM不是Hyper-V VM之类的自包含物。没有单一的事实来源,因为它由许多组件组成,您需要单独从这些组件中收集信息。例如:获取VM的所有IP地址。
要开始获取计算机的IP,您将获得VM信息:
$VM = Get-AzureRmVm -ResourceGroup $RG -Name 'MyUberVM'
现在,您可以查看VM的网络配置文件,该配置文件将列出与VM关联的网络接口对象,但这些对象具有所有2个属性,即主要和Id。 Primary属性就是它的声音,它指定了主网络接口(如果有多个)。 Id属性将具有网络接口对象的完整ResourceId,如:
/subscriptions/12345abc-0000-1111-2222-ssl430asd432/resourceGroups/MyVMRG/providers/Microsoft.Network/networkInterfaces/myubervm01715
现在我们可以使用它来获取实际的网络接口对象,但最简单的方法就是对它运行Get-AzureRmResource
,并将其传递给Get-AzureRmNetworkInterface
。
$NIs = $VM.NetworkProfile.NetworkInterfaces.Id|%{Get-AzureRmResource -ResourceId $_}|Get-AzureRmNetworkInterface
这将为您提供网络接口对象的集合。其中每个都有几个属性,但我们关心的是IpConfigurations属性。每个网络接口的每个IpConfig都有一个PrivateIpAddress属性和一个PublicIp属性。 PrivateIp属性只是一个字符串,所以我们可以使用它,但PublicIp是一个对象,所以我们需要引用它的IpAddress属性。现在,根据您与给定VM关联的网络接口数量,这可能会返回多个网络接口,因此为了安全起见,我将使用','加入它们。为了打破这种局面,我们可以做到:
$PrivateIps = $NIs.IpConfigurations.PrivateIpAddress -join ', '
$PublicIps = $NIs.IpConfigurations.PublicIp.IpAddress -join ', '
因此结束了获取Azure VM的IP的过程。这会处理您建议的2个列。不可否认,其中两个更难,但仍然只有其中两个。一旦您完成并获取每个VM所需的所有数据,我就会为其创建一个自定义对象,并将这些自定义对象输出到您的CSV文件中。
答案 1 :(得分:0)
如果我的理解是正确的,get-azurermvm
可以获得订阅中的所有vms,但是您无法获得详细的属性。您可以使用Get-AzurermVM get-azurermvm -ResourceGroupName $rg -Name $vm.Name
获取详细属性。您可以尝试使用以下脚本。
##resource group name
$rg="<>"
$vms=get-azurermvm -ResourceGroupName $rg
ForEach ($vm in $vms) {
get-azurermvm -ResourceGroupName $rg -Name $vm.Name
}
注意:您可以使用get-azurermvm -ResourceGroupName $rg -Status
来获取VM的状态信息。