如何在可变

时间:2018-05-10 10:32:23

标签: powershell azure

我想检索其中包含名称“ server ”的所有vms的列表以及这些计算机的ip地址。以下内容非常适合获取名称,但是如何将每个vm的私有IP地址添加到变量中?

$machines = Get-AzureRmVM -ResourceGroupName $resourcegroup | where {$_.Name -like server" + "*"}

1 个答案:

答案 0 :(得分:1)

Get-AzureRmVM Cmdlet无法获取任何虚拟机的IP地址信息。

您必须从Get-AzureRmVM获取NetworkInterface名称,然后将值传递给Get-AzureRmNetworkInterface Cmdlet以获取私有IP。

Get-AzureRmVM -ResourceGroupName TestRG | Where-Object {$_.Name -like '*server*'} | ForEach-Object {
    $NIC = $_.NetworkProfile.NetworkInterfaces.id -replace '^.*/'
    $RGName = $_.NetworkProfile.NetworkInterfaces.id -replace '^.*resourceGroups/(.*)/providers.*','$1'    
    $IP = (Get-AzureRmNetworkInterface -Name $NIC -ResourceGroupName $RGName).IpConfigurations.PrivateIpAddress
    [PSCustomObject]@{VMName = $_.Name ; PrivateIpAddress = $IP}
}

或者您可以直接调用Get-AzureRmNetworkInterface并使用VirtualMachine.ID属性过滤VM

$Resourcegroup = 'TestRG'; $VmName = 'server'
Get-AzureRmNetworkInterface | Where-Object { $_.VirtualMachine.ID -match "^.*resourceGroups/$Resourcegroup.*virtualMachines/.*$VmName.*" } | 
    Select-Object @{L='VMName';ex = {$_.VirtualMachine.Id -replace '^.*/'}}, @{L='PrivateIpAddress';ex = {$_.IpConfigurations.PrivateIpAddress}}