Powershell, migrer le serveur d'impression

PowerShell_5.0_icon.png

Changement de serveur d'impression. Le nouveau serveur dispose des mêmes imprimantes, avec les mêmes pilotes et les mêmes noms de partage que l'ancien serveur.[1]

A présent il faut pour chaque utilisateur; Pour chacune des imprimante, si elle est partagée par le serveur d'impression qu'on souhaite remplacer:

  • Ajouter l'imprimante réseau avec le même nom mais nouveau serveur
  • La remettre en imprimante par défaut si besoin.
  • Supprimer l'imprimante d'origine.

Voici le script Powershell à mettre à l'ouverture de session de l'utilisateur[2].

Dans le script, modifiez les variables $oldServer et $newServer. Pour cette première variable($oldServeur), c'est une liste qui indique tous les noms qui ont pu être utilisés pour appeler le partage (nomWins, FQDN, IP)

# Liste les imprimantes, Pour chacune:
#   Si c'est une  des imprimante réseau partagée par l'ancien serveur.
#     Connecte une imprimante portant le même nom de partage, mais sur le nouveau serveur
#     Déconnecte l'ancienne
#
# Mars 2019 Gnieark https://blog-du-grouik.tinad.fr , sans aucune garantie

$oldServer = "\\nom.domaine.lan","\\nom","\\176.18.51.10"
$newServer = "\\nouveaunom.domaine.lan"

#Rechercher l'imprimante par defaut
$defaultPrinter = Get-WmiObject -Query " SELECT Name,ServerName,ShareName FROM Win32_PRINTER WHERE Default=$true"

#Lister toutes les imprimantes
$printers =  Get-WmiObject -Query " SELECT * FROM Win32_PRINTER"

foreach($printer in $printers){
    if($oldServer -Contains $printer.ServerName)
    {
        #ajouter la même imprimante mais connectée sur le nouveau serveur
        $newName = $newServer + "\" + $printer.ShareName
        ([wmiclass]"Win32_Printer").AddPrinterConnection($newName)
       
        #La mettre en imprimante par défaut si nécessaire:
        if( $defaultPrinter.Name -eq $printer.Name)
        {
           $query = " SELECT * FROM Win32_PRINTER WHERE Name = '" + $newName.Replace("\","\\") + "'"
           (Get-WmiObject -Query $query).setDefaultPrinter()
            
        }
        #Supprimer l'imrimante d'origine
        $printer.delete()
        
     }

}

Bon, OK, on a vu plus technique et opensource sur ce blog Mais:

  • Moi je peux critiquer Powershell car je m'en sers.
  • De gros billets (qemu-kvm , Ansible, IPV6 etc...) sont en cours de rédaction, ça viendra.

Notes

[1] Mais à présent le serveur d'impression est une VM qui ne fait que ça! (je suis en train de nettoyer une infra Active Directory)

[2] je vous laisse faire pour trouver comment ajouter un script à l'ouverture ou fermeture de session. Attention cependant il doit être éxécuté avec le compte de l'utilisateur. (j'écris pas ça pour ceux qui utilisent OCS et ne savent pas déployer de GPO hein ;)

Page top