' ---------------------------------------------------------- ' Script VBS de définition d'imprimante par défaut ' en fonction du port sur une machine locale ou distante ' Fait appel à WMI ' Syntaxe : ' setdefaultprinter [] ' Paramètre : ' : nom NetBIOS de l'ordinateur ' si absent : machine locale ' ' JC BELLAMY © 2005 ' ---------------------------------------------------------- Const SW_HIDE=0 Const SW_SHOWNORMAL=1 Dim shell,fso,attr,desc,net,args Set shell = WScript.CreateObject("WScript.Shell") Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set net = Wscript.CreateObject("WScript.Network") Set args = Wscript.Arguments nbargs=args.count Testhost true If nbargs=0 Then Syntaxe If nbargs<=1 Then If args(0)="/?" Then Syntaxe computer=net.computername Else computer=args(1) End If Port=args(0) 'on error resume next set PrinterSet = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & Computer).ExecQuery _ ("SELECT * FROM Win32_Printer") If err.number<>0 Then wscript.echo "Erreur : " & err.description wscript.quit End If msg="Imprimantes disponibles sur " & ucase(computer) Liste=msg & VBCRLF & String(len(msg),"-") Trouve=false Dim Def for each Printer in PrinterSet If Printer.Default Then pref="* Défaut * " else pref=" " Liste=Liste & VBCRLF & pref & Printer.Caption & chr(9) & Printer.PortName If StrComp(Port, Printer.PortName, vbTextCompare)=0 Then Trouve =true Set PrinterDef=Printer End If next If trouve Then Code=PrinterDef.SetDefaultPrinter wscript.echo "Imprimante " & PrinterDef.Caption & " sur " & PrinterDef.PortName If code=0 Then wscript.echo "Définie comme imprimante par défaut" Else wscript.echo "Erreur" & Errcode(code) End If Else wscript.echo "Port " & Port & " non trouvé" wscript.echo Liste End If Wscript.quit '-------------------------------------------------------------------- 'Sous-programme de test du moteur 'Vu les sorties générées, c'est CSCRIPT (et non pas WSCRIPT) 'qui doit être utilisé de préférence Sub TestHost(force) dim rep strappli=lcase(Wscript.ScriptFullName) strFullName =lcase(WScript.FullName) i=InStr(1,strFullName,".exe",1) j=InStrRev(strFullName,"\",i,1) strCommand=Mid(strFullName,j+1,i-j-1) if strCommand<>"cscript" then If force then Init="Ce script doit être lancé avec CSCRIPT" Else Init="Il est préférable de lancer ce script avec CSCRIPT" End If rep=MsgBox(Init & VBCRLF & _ "Cela peut être rendu permanent avec la commande" & VBCRLF & _ "cscript //H:CScript //S /Nologo" & VBCRLF & _ "Voulez-vous que ce soit fait automatiquement?", _ vbYesNo + vbQuestion,strappli) if rep=vbYes then nomcmd="setscript.bat" Set ficcmd = fso.CreateTextFile(nomcmd) ficcmd.writeline "@echo off" ficcmd.writeline "cscript //H:CScript //S /Nologo" ficcmd.writeline "pause" params="" For i = 0 To nbargs-1 params=params & " " & args(i) next ficcmd.writeline chr(34) & strappli & chr(34) & params ficcmd.writeline "pause" ficcmd.close shell.Run nomcmd, SW_SHOWNORMAL,true force=true end if If force then WScript.Quit end if end sub '-------------------------------------------------------------------- Sub Syntaxe msg= "Définition d'imprimante par défaut en fonction" & VBCRLF msg=msg & "du port sur une machine locale ou distante" & VBCRLF msg=msg & "JCB © 2005" & VBCRLF msg=msg & "---------------------------------------------" & VBCRLF msg=msg & "Syntaxe :" & VBCRLF msg=msg & " setdefaultprinter []" & VBCRLF msg=msg & "Paramètres :" & VBCRLF msg=msg & " : nom du port de l'imprimante" & VBCRLF msg=msg & " : nom NetBIOS de l'ordinateur" & VBCRLF msg=msg & " si absent : machine locale" & VBCRLF wscript.echo msg wscript.quit End Sub '-------------------------------------------------------------------- Function ErrCode(code) Select Case code case 0 Errcode="Ce périphérique fonctionne correctement." case 1 Errcode="Ce périphérique ne fonctionne pas correctement." case 2 Errcode="Windows ne peut pas charger le pilote de ce périphérique." case 3 Errcode="Le pilote de ce périphérique doit être endommagé," & VBCRLF & _ "ou la mémoire ou autres ressources de votre système" & VBCRLF & _ "sont peut être insuffisants." case 4 Errcode="Ce périphérique ne fonctionne pas correctement." & VBCRLF & _ "L'un des pilotes de votre Registre est peut-être endommagé." case 5 Errcode="Le pilote de ce périphérique a besoin d'une ressource" & VBCRLF & _ "que Windows ne peut pas gérer." case 6 Errcode="La configuration de démarrage de ce périphérique " & VBCRLF & _ "entre en conflit avec d'autres périphériques." case 7 Errcode="Impossible de filtrer." case 8 Errcode="Le chargeur de pilote du périphérique n'est pas présent." case 9 Errcode="Ce périphérique ne fonctionne pas correctement car" & VBCRLF & _ "le microprogramme de contrôle ne renvoie pas correctement" & VBCRLF & _ "les ressources du périphérique." case 10 Errcode="Ce périphérique ne peut pas démarrer." case 11 Errcode="Ce périphérique a échoué." case 12 Errcode="Ce périphérique ne peut pas trouver suffisamment" & VBCRLF & _ "de ressources libres à utiliser." case 13 Errcode="Windows ne peut pas vérifier les ressources de ce périphérique." case 14 Errcode="Ce périphérique ne fonctionnera pas correctement" & VBCRLF & _ "jusqu'à ce que vous redémarriez votre ordinateur." case 15 Errcode="Ce périphérique ne fonctionne pas correctement" & VBCRLF & _ "car il y a probablement un problème de ré-énumération." case 16 Errcode="Windows ne peut pas identifier toutes les ressources" & VBCRLF & _ "utilisées par ce périphérique." case 17 Errcode="Ce périphérique réclame un type de ressource inconnu." case 18 Errcode="Réinstallez les pilotes de ce périphérique." case 19 Errcode="Votre registre est peut-être endommagé." case 20 Errcode="Échec lors de l'utilisation du chargeur VxD." case 21 Errcode="Échec du système : essayez de modifier le pilote de votre périphérique." & VBCRLF & _ "Si cela ne fonctionne pas, consultez la documentation de votre matériel." & VBCRLF & _ "Windows supprime ce périphérique." case 22 Errcode="Ce périphérique est désactivé." case 23 Errcode="Échec du système : essayez de modifier le pilote de ce périphérique." & VBCRLF & _ "Si cela ne fonctionne pas, consultez la documentation de votre matériel." case 24 Errcode="Ce périphérique n'est pas présent, ne fonctionne pas correctement," & VBCRLF & _ "ou tous ses pilotes ne sont pas installés." case 25 Errcode="L'installation de ce périphérique par Windows est toujours en cours." case 26 Errcode="L'installation de ce périphérique par Windows est toujours en cours." case 27 Errcode="Ce périphérique n'a pas de configuration de journal valide." case 28 Errcode="Les pilotes de ce périphérique ne sont pas installés." case 29 Errcode="Ce périphérique est désactivé car le microprogramme du périphérique" & VBCRLF & _ "ne lui a pas donné les ressources demandées." case 30 Errcode="Ce périphérique utilise une ressource de requête d'interruption (IRQ)" & VBCRLF & _ "qu'un autre périphérique utilise déjà." case 31 Errcode="Ce périphérique ne fonctionne pas correctement car Windows" & VBCRLF & _ "ne peut pas charger les pilotes demandés pour ce périphérique." Case else ErrCode="Code inconnu" End Select End Function