powershell 检索Azure VM的公共IP地址的更简单方法

dohp0rv5  于 2022-11-10  发布在  Shell
关注(0)|答案(7)|浏览(173)

使用特定VM的名称/资源组,我尝试获取该VM的公共IP地址。
这段代码可以工作,但与其他AzureRM cmdlet相比似乎很笨拙。

$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

有没有更快捷/更容易/更快捷的方式来获取这些信息?

z9zf31ra

z9zf31ra1#

据我所知,PowerShell还没有。但您可以使用Azure CLI
az vm list-ip-addresses -n <VMName> -g <ResourceGroup> | grep publicIpAddresses

rnmwe5a2

rnmwe5a22#

尝试使用Azure CLI命令:

az vm list-ip-addresses -g groupName -n vmName --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" -o tsv

或者PowerShell命令只使用您的虚拟机名进行筛选:

$ipAddress= (Get-AzureRmPublicIpAddress -ResourceGroupName groupName | Where-Object { $_.IpConfiguration.Id -like "*vmName*" }
)
$ipAddress.IpAddress
qv7cva1a

qv7cva1a3#

这是可能的。此脚本将列出您的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地址,但我们可以抓取其网络接口名称,并通过所有分配的NIC名称匹配的公共IP对其进行通配符搜索。它不是很快,但会提供正确的结果。

$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
    }
}
b4qexyjb

b4qexyjb4#

我获得Linux VM的值的方法是使用下面的代码。

Get-AzureRmPublicIpAddress -ResourceGroupName <yourRG> -Name <yourVMName> | Select-Object {$_.IpAddress}

这将返回以下类型的内容:

$_.IpAddress
------------
52.170.56.60
pu3pd22g

pu3pd22g5#

这会输出一些信息,但公有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
bcs8qyzn

bcs8qyzn6#

您还可以将AzPublicIpAddress IpConfiguration.ID与VM的NetworkInterfaces.Id匹配:

Get-AzPublicIpAddress | ?{$_.IpConfiguration.Id -match "$((Get-AzVM -Name $computername).NetworkProfile.NetworkInterfaces.Id).*" }
7eumitmz

7eumitmz7#

获取VM对象$vm=Get-Azvm-Name$vmName-Status

获取连接到VM的网络适配器对象的名称$NetworkInterfaceName=$vm.NetworkProfile.NetworkInterfaces.Id.Split(“/”)|选择-最后1

获取附加到VM的网络适配器对象$NetworkInterfaceObject=Get-AzNetworkInterfaceName$NetworkInterfaceName

获取附加到网络适配器对象的公有IP地址对象名称$ipObjectName=$NetworkInterfaceObject.IpConfigurations.PublicIpAddress.Id.Split(“/”)|选择-最后1

获取公有IP地址对象附带的公有IP地址

$ipObject=Get-AzPublicIpAddress-ResourceGroupName$resource GroupName-Name$ipObjectName
写入-输出$ipObject.IpAddress

相关问题