Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检索Azure虚拟机的更简单方法&x27;公共IP地址_Azure_Powershell_Azure Rm - Fatal编程技术网

检索Azure虚拟机的更简单方法&x27;公共IP地址

检索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的名称/资源组,我试图获取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

是否有更快/更容易/更短的方式访问此信息?

据我所知,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