Question Mise à jour de drivers d'imprimantes

Plus d'informations
il y a 15 ans 3 semaines #9015 par Boulétreau
Bien le bonjour amis powershelleurs

Un problème s'est posé à un de mes collègues (il y a quelques jours) lors de la mise à jour de drivers \"HP Universal Printing PCL 6\" par les drivers \"HP Universal Printing PCL 6 (v5.2)\" sur le serveur d'impression.

A lieu de mettre à jour le serveur, il y a eu un ajout de drivers.

Se faire le changement à la main (environ 200 imprimantes) c'est assez long. Je lui ai donc proposé ce script. Il y aura surement quelques mise à jour (tous se perfectionne) mais disons qu'il est déjà fonctionnel et j'espère qu'il pourra aider certains dans leur quotidien :)

[code:1]Function Recup-Imp
{
param([string]$NouveauDriver, [string]$AncienDriver)

#Récupération des imprimantes en fonction de l'ancien driver
$IMP = Get-WmiObject -class Win32_Printer -computername \".\" -namespace \"root\CIMV2\" -Filter \"drivername='$AncienDriver'\"
foreach($imprimante in $IMP){
$NomImp=$imprimante.Name
if($NomImp){
#Obtient l'imprimante
$Driver = Get-WmiObject -Class Win32_Printer -ComputerName \".\" -Namespace root\CIMV2 -Filter \"name='$NomImp'\"
#change le nom du driver
$Driver.DriverName = $NouveauDriver
#effectue le changement
[Void]$Driver.Put()

#Rapport dans le logg puis dans la console
\"$(Get-Date) | $NomImp a maintenant '$NouveauDriver' comme driver.\">> \".\$(Get-Date -Format dd-MM-yyyy).log\"
Write-Host $(Get-Date)\" | $NomImp a maintenant '$NouveauDriver' comme driver.\"
}
}
}
Clear-Host
$Liste = Import-Csv \"liste.csv\" -Delimiter \";\"
foreach($ligne in $Liste){
Recup-Imp -AncienDriver $ligne.Ancien -NouveauDriver $ligne.Nouveau
}[/code:1]

Pourquoi utiliser un CSV? Je trouvais ça plus sympa qu'un simple fichier texte :P

Au niveau des log j'ai fais un truc à l'arrache juste pour garder les informations : heure de changement du drivers, nom de l'imprimante et nouveau driver.

J'espère que ça vous plaira.

La pièce jointe ChangeDrivers_console.ps1 est absente ou indisponible

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 semaines #9020 par Boulétreau
J'allais oublier d'indiquer la structure du CSV :

Ancien;Nouveau
HP Universal Printing PCL 6;HP Universal Printing PCL 6 (v5.2)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 semaines #9028 par Arnaud Petitjean
Salut Boulette,

Merci pour ton script, qui peut il est vrai sauver des heures de boulot a qqun...

Par contre pourrais tu etre un peu plus explicite sur la mauvaise manip qui s'est produite ? Ainsi je comprendrais mieux l'objectif du script, qui est si j'ai bien compris de changer les drivers de toutes les imprimantes.

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 3 semaines #9030 par Boulétreau
Bonjour,

Alors je ne suis pas un expert en serveur d'impression. A ce que mon collègue m'a expliqué, pour une imprimante qui est installée sur un serveur, on a la possibilité de mettre à jour son driver et lorsque l'utilisateur utilise cette même imprimante, le poste récupère automatiquement la mise à jour du driver (en gros il me semble que c'est cela).
Sauf que lors de la mise à jour de ce driver HP Universal..., au lieu de garder le même nom de driver et de mettre à jour ce driver, il y a eu un deuxième driver mais (v5.2).
Ce qui aurai obligé à faire le changement de driver sur toutes les imprimantes, à la main.

Je ne sais malheureusement pas si ce problème de deuxième driver HP Universal... est du à une fausse manip ou pas.

Mais si nous avons eu le problème il se peut que cela arrive aussi à d'autre personne. D'où mon poste.

J'espère que cela t'éclairera un peu plus.
*********************************************************

Pour le CSV :

Ancien;Nouveau
HP Universal Printing PCL 6;HP Universal Printing PCL 6 (v5.2)

Pour le script :
[code:1]$Liste = Import-Csv \"liste.csv\" -Delimiter \";\"
foreach($ligne in $Liste){
Recup-Imp -AncienDriver $ligne.Ancien -NouveauDriver $ligne.Nouveau
}[/code:1]
Je récupère le nom de l'ancien et du nouveau driver, et que je met en paramètre dans Recup-IMP. Le nom est pas forcément explicite... Mais j'ai pas beaucoup d'imagination :laugh:
[code:1]$IMP = Get-WmiObject -class Win32_Printer -computername \".\" -namespace \"root\CIMV2\" -Filter \"drivername='$AncienDriver'\"[/code:1]
Je fait un premier filtre pour récupérer les imprimantes qui ont le drivers à changer. Il faut faire attention à la casse des caractères.
[code:1]$Driver = Get-WmiObject -Class Win32_Printer -ComputerName \".\" -Namespace root\CIMV2 -Filter \"name='$NomImp'\"
#change le nom du driver
$Driver.DriverName = $NouveauDriver
#effectue le changement
[Void]$Driver.Put()[/code:1]
Maintenant que j'ai mes imprimantes, je change le driver par le nouveau.

Je fais ensuite un petit log pour garder l'heure du changement de driver et j'affiche aussi dans la console. Cela permet de se rendre compte ou en est le script. J'aurai pu faire un affichage du genre \"50 sur 110 ont été changées\" mais j'y pense seulement maintenant :P

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.040 secondes
Propulsé par Kunena