I. Présentation
Dans ce tutoriel, nous allons voir comment utiliser PowerShell pour lister les imprimantes installées sur un serveur d’impression Windows, en indiquant le nom et l’adresse IP.
Lorsque l’on utilise la console Gestion des impressions, on peut afficher plusieurs informations comme le nom de l’imprimante, le nom du pilote, le nom du port, etc… Mais pas l’adresse IP. C’est dommage, surtout si vous ne mettez pas l’adresse IP dans le nom de vos ports.
Encore une fois, PowerShell va nous sauver la mise, car avec un petit bout de code de quelques lignes, on va pouvoir lister les imprimantes et obtenir l’adresse IP !
II. PowerShell : Get-Printer et Get-PrinterPort
En PowerShell, on peut lister les imprimantes avec la commande Get-Printer.
Get-Printer
Elle nous retourne différentes propriétés, un peu dans le même esprit que la console Gestion des impressions.
Nous avons aussi un autre cmdlet, nommé Get-PrinterPort, qui lui retourne des informations sur les ports. Intéressant… d’autant plus que l’on peut avoir le nom du port, mais aussi l’adresse IP en regardant la propriété PrinterHostAddress.
Get-PrinterPort
Pour obtenir l’adresse IP d’une imprimante, il faut spécifier le nom du port de l’imprimante grâce au paramètre -Name (ou avec un filtre Where, mais c’est moins efficient). Puis, récupérer seulement la propriété PrinterHostAddress, comme ceci :
(Get-PrinterPort -Name "MonPortNumero1" ).PrinterHostAddress
Nous avons tout ce qu’il nous faut, sauf que l’on a le nom de l’imprimante d’une part, et l’adresse IP du port de l’autre. Il ne reste plus qu’à faire opérer la magie de PowerShell pour ressortir un joli tableau avec nos deux informations, grâce à un objet personnalisé.
Nous récupérer la liste des imprimantes et effectuer une boucle Foreach.
Get-Printer | Foreach
Au sein de cette boucle, nous allons construire notre objet personnalisé et il sera alimenté à chaque tour de boucle. Il aura deux propriétés (mais on pourrait ajouter d’autres champs) : le nom et l’adresse IP.
Ce qui nous donne le bout de code suivant :
Get-Printer | Foreach $PrinterName = $_.Name $PrinterPort = $_.PortName $PrinterIPAddress = (Get-PrinterPort -Name $PrinterPort).PrinterHostAddress New-Object PSObject -Property @ "Nom" = $PrinterName "AdresseIP" = $PrinterIPAddress Clear-Variable PrinterIPAddress
Si vous souhaitez une sortie plus sympa, effectuez un export CSV de cette liste ou ajoutez « | Out-GridView » après l’accolade finale.
Voilà, le tour est joué !