检索Azure虚拟机的更简单方法&x27;公共IP地址
使用特定VM的名称/资源组,我试图获取VM的公共IP地址 这段代码可以工作,但与其他AzureRM cmdlet相比,它似乎很笨拙检索Azure虚拟机的更简单方法&x27;公共IP地址,azure,powershell,azure-rm,Azure,Powershell,Azure Rm,使用特定VM的名称/资源组,我试图获取VM的公共IP地址 这段代码可以工作,但与其他AzureRM cmdlet相比,它似乎很笨拙 $VM = Get-AzureRmVM -ResourceGroupName MyResourceGroup -Name MyVMName $NIC = $VM.NetworkProfile.NetworkInterfaces[0].Id -replace '.*\/' $NI = Get-AzureRmNetworkInterface -Name $NIC -Re
$VM = Get-AzureRmVM -ResourceGroupName MyResourceGroup -Name MyVMName
$NIC = $VM.NetworkProfile.NetworkInterfaces[0].Id -replace '.*\/'
$NI = Get-AzureRmNetworkInterface -Name $NIC -ResourceGroupName MyResourceGroup
$NIIC = Get-AzureRmNetworkInterfaceIpConfig -NetworkInterface $NI
$PIP = $NIIC.PublicIpAddress.Id -replace '.*\/'
$PIP = Get-AzureRmPublicIpAddress -Name $PIP -ResourceGroupName MyResourceGroup
$PIP.IpAddress
是否有更快/更容易/更短的方式访问此信息?据我所知,PowerShell还没有。但是您可以使用Azure CLI
az虚拟机列表ip地址-n-g | grep publicipaddress
尝试Azure CLI命令:
az vm list-ip-addresses -g groupName -n vmName --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" -o tsv
或者PowerShell命令仅使用您的vm名称进行筛选:
$ipAddress= (Get-AzureRmPublicIpAddress -ResourceGroupName groupName | Where-Object { $_.IpConfiguration.Id -like "*vmName*" }
)
$ipAddress.IpAddress
我获取Linux虚拟机值的方法是使用以下代码
Get-AzureRmPublicIpAddress -ResourceGroupName <yourRG> -Name <yourVMName> | Select-Object {$_.IpAddress}
这是可能的。此脚本将列出Azure云中的所有VM PIP 旧的
$VM_int = Get-AzureRmResource -ODataQuery "`$filter=resourcetype 'Microsoft.Compute/virtualMachines'"
foreach($int in $VM_int){
$vmName = $int.Name
$ipAddress= (Get-AzureRmPublicIpAddress -ResourceGroupName $int.ResourceGroupName | Where-Object { $_.IpConfiguration.Id -like "*$vmName*" })
$vmName + ' --- ' + $ipAddress.IpAddress
}
更新
不幸的是,Get-AzVM没有提供VM的公共IP地址,但是我们可以刮取它的网络接口名称,并通过所有分配的公共IP对其进行通配符搜索,这些IP与NIC名称匹配。
它不快,但会提供正确的结果
$array = @()
foreach ($vm in Get-AzVM) {
$vmNicName = $vm.NetworkProfile.NetworkInterfaces.Id.Split("/")[8]
$ipAddress = Get-AzPublicIpAddress | Where-Object {$_.IpConfiguration.Id -like "*$vmNicName*"}
if ($null -ne $ipAddress) {
$pipInput = New-Object psobject -Property @{
VM = $vm.Name
PublicIP = $ipAddress.IpAddress
}
$array += $pipInput
}
}
这会输出一些信息,但是公共IP地址在其中
Get-AzPublicIpAddress -ResourceGroupName MyResourceGroup | Where-Object {$_.name -like "*MyVMName*" }
或者您可以这样做,只需获取IP地址:
Get-AzPublicIpAddress -ResourceGroupName MyResourceGroup | Where-Object {$_.name -like "*MyVMName*" } | Select-Object { $_.IpAddress }
输出如下所示:
$_.IpAddress
--------------
13.255.162.33
我认为没有更简单的方法了答案能解决你的问题吗?或者解决方案有问题?如果你需要,我也可以提供更多的帮助。
$_.IpAddress
--------------
13.255.162.33