我想检索其中包含名称“ server ”的所有vms的列表以及这些计算机的ip地址。以下内容非常适合获取名称,但是如何将每个vm的私有IP地址添加到变量中?
$machines = Get-AzureRmVM -ResourceGroupName $resourcegroup | where {$_.Name -like server" + "*"}
答案 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}}