Il peut parfois s’avérer nécessaire dans un script de récupérer l’adresse IP d’une VM Azure alors que celle-ci n’est pas enregistrée dans le DNS.
Dans Azure « classic» (l’ancienne version), cette information était renvoyée directement à l’aide du cmdlet Get-AzureVM :
Malheureusement, pour les VM créées dans Azure Resource Manager (Azure RM, la « nouvelle » version), le cmdlet Get-AzureRmVM fonctionne différemment et ne renvoie plus directement cette information :
Il renvoie par contre une information intéressante : l’ID de la carte réseau associée à la VM, via la propriété NetworkInterfaceIDs :
La fin de cet ID représente le « display name » de la carte réseau, qui va nous permettre de retrouver les propriétés détaillées de cette carte à l’aide du cmdlet Get-AzureRmNetworkInterface :
Dans ces propriétés détaillées, une en particulier nous intéresse : IpConfigurationsText.
Comme son nom l’indique, elle contient le détail de la configuration Ip de la carte réseau, dont la PrivateIpAddress qui nous intéresse :
Afin d’automatiser ce processus, j’ai réalisé une fonction Get-AzureRmVMIP qui prend en entrée le nom de la VM et celui de son Resource Group, et qui renvoie le nom de la carte réseau et son IP :
Fonction dont voici le code source, que vous pouvez réutiliser ou adapter à votre guise dans vos propres scripts.
Function Get-AzureRmVMIP
{ param
(
[Parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[string]
$Name,
[Parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true)]
[string]
$ResourceGroupName
)
Process
{
$VM = Get-AzureRmVM -Name $Name -ResourceGroupName $ResourceGroupName
$NICs = get-AzureRmNetworkInterface -name $vm.NetworkInterfaceIDs.split("/")[-1] -ResourceGroupName $ResourceGroupName
$VMIPAddresses = @()
foreach ($NIC in $NICs) {
$VMIPAddresses += @{$NIC.Name = $NIC.IpConfigurations.PrivateIpAddress}
}
Return $VMIPAddresses
}
}