列出 Azure 中特定子网中的所有虚拟机

问题描述 投票:0回答:2

只是想知道如何检索 Azure 中给定特定子网中的虚拟机详细信息。

我已经使用了以下内容,但它在powershell(Cloud shell)中不再起作用

列出属于特定子网的所有 azure 虚拟机

任何帮助将不胜感激。

谢谢

azure powershell
2个回答
1
投票

以下代码片段已针对我的环境进行了测试:

$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


0
投票

此代码片段将在 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"
© www.soinside.com 2019 - 2024. All rights reserved.