15/01/2025

PowerShellSystème

Serveur d’impression : lister les imprimantes avec le nom et l’adresse IP

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{ <code> }

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é !

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.