只是想知道如何检索 Azure 中给定特定子网中的虚拟机详细信息。
我已经使用了以下内容,但它在powershell(Cloud shell)中不再起作用
任何帮助将不胜感激。
谢谢
以下代码片段已针对我的环境进行了测试:
$vms = Get-AzVM
$tgtSubnet = "MySubnet"
foreach($vm in $vms)
{
$networkInterface = Get-AzNetworkInterface -Name ($vm.NetworkProfile.NetworkInterfaces[0].Id.Split('/')[-1])
$subnetName = $networkInterface.IpConfigurations[0].Subnet.Id.split('/')[-1]
if($subnetName -eq $tgtSubnet)
{
Write-Output $vm
}
}
输出:
确保您的计算机上安装了 Azure PowerShell。
此代码片段将在 Azure 云 shell - bash 上运行, 为您提供 RG 和子网下的虚拟机列表以及附加的私有 IP
tgtSubnet="<Subnet - name>"
resourceGroupName="<Resource Group Name>"
vms=$(az vm list --resource-group "$resourceGroupName" --query "[].{Name:name, NIC:networkProfile.networkInterfaces[0].id}" -o tsv)
while IFS=$'\t' read -r vmName nicId; do
if [[ -n "$nicId" ]]; then
nicName=$(basename "$nicId")
subnetName=$(az network nic show --name "$nicName" --resource-group "$resourceGroupName" --query "ipConfigurations[0].subnet.id" -o tsv | awk -F'/' '{print $(NF-2)}')
privateIp=$(az network nic show --name "$nicName" --resource-group "$resourceGroupName" --query "ipConfigurations[0].privateIPAddress" -o tsv)
if [ "$subnetName" == "$tgtSubnet" ]; then
echo "$vmName - $privateIp"
fi
else
echo "NIC ID for VM $vmName is empty or not found."
fi
done <<< "$vms"