美好的一天
我的任务是收集不同订阅中所有VM的列表,我有一个收集的脚本:Mode,Name,ResourceGroupName,location,VMSize和Status。有两个空列:订阅和可用性集。
有点背景故事,我签约雇用供应商来部署资源的公司,现在他们不知道供应商是否按照他们的想法行事。
我想弄清楚的是:
我一直在谷歌搜索找到我需要定义的PSObjects。任何帮助将不胜感激
1.如何列出资源所在的ASG
如果要列出VM中的所有ASG,您需要通过所有NIC列出它们,您可以参考下面的命令,$asgnames
是所有ASG的列表,请注意,如果不同的NIC具有相同的ASG,它将输出几次。
$nics = (Get-AzureRmVM -ResourceGroupName "<ResourceGroupName>" -Name "<VM Name>").NetworkProfile.NetworkInterfaces
$nicnames = @()
$asgnames = @()
foreach($nic in $nics){
$a = $nic.Id -split"/"
$nicname = $a[8]
$nicnames += $nicname
$ipconfig = Get-AzureRmResource -ResourceGroupName <ResourceGroupName> -ResourceType Microsoft.Network/networkInterfaces/ipConfigurations -ResourceName "$nicname/ipconfig1" -ApiVersion 2018-07-01
$asgids = $ipconfig.Properties.applicationSecurityGroups.id
foreach ($asgid in $asgids){
$a = $asgid -split"/"
$asganme = $a[8]
$asgnames += $asganme
}
}
2.资源所在的NSG
如果要在VM中获取NSG,则需要通过所有NIC和VNET子网获取NSG。
获得NIC的NSG,$nsgnic
是NSG:
$nic = Get-AzureRmResource -ResourceGroupName <ResourceGroupName> -ResourceType Microsoft.Network/networkInterfaces -ResourceName "<NIC name>" -ApiVersion 2018-07-01
$a = $nic.properties.networkSecurityGroup.id -split"/"
$nsgnic = $a[8]
得到子网的NSG,$nsgsub
是NSG:
$subnet = Get-AzureRmResource -ResourceGroupName <ResourceGroupName> -ResourceType Microsoft.Network/virtualNetworks/subnets -ResourceName "<Vnet name>/<Subnet name>" -ApiVersion 2018-07-01
$b = $subnet.properties.networkSecurityGroup.id -split"/"
$nsgsub = $a[8]
那么VM的NSG将是sum
和$nsgnic
的$nsgsub
。
3.vCPU和RAM
尝试下面的命令,NumberOfCores
是vCPUs
,MemoryInMB
是RAM
,注意结果中的RAM在MB
,如果需要你可以将它转换为GB
。
Get-AzureRmVMSize -ResourceGroupName "<ResourceGroupName>" -VMName "<VMName>"
4.存储帐户
如果我没有误解,这里的存储帐户是指Diagnostics storage account
,请尝试下面的命令,$storage
是存储帐户uri。
$a = Get-AzureRmResource -ResourceGroupName <ResourceGroupName> -ResourceType Microsoft.Compute/virtualMachines -ResourceName "<VM Name>" -ApiVersion 2018-06-01
$storage = $a.properties.diagnosticsProfile.bootDiagnostics.storageUri