' ---------------------------------------------------------- ' Script VBS d'énumération d'imprimantes ' sur une machine locale ou distante ' Fait appel à WMI ' Syntaxe : ' enumprinter [] ' Paramètre : ' : nom NetBIOS de l'ordinateur ' si absent : machine locale ' ' JC BELLAMY © 2002 ' ---------------------------------------------------------- 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 If args.count=0 Then computer=net.computername Else computer=args(0) If computer="/?" Then msg= "Énumération des imprimantes locales ou réseau" & VBCRLF msg=msg & "sur une machine locale ou distante" & VBCRLF msg=msg & "JCB © 2002" & VBCRLF msg=msg & "---------------------------------------------" & VBCRLF msg=msg & "Syntaxe :" & VBCRLF msg=msg & " enumprinter []" & VBCRLF msg=msg & "Paramètre :" & VBCRLF msg=msg & " : nom NetBIOS de l'ordinateur" & VBCRLF msg=msg & " si absent : machine locale" & VBCRLF wscript.echo msg wscript.quit End If End If Testhost true attr=array(1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192) desc=array( _ "Les travaux d'impression sont mis file d'attente", _ "Les documents sont envoyés directement à l'imprimante", _ "Imprimante par défaut de l'ordinateur", _ "Disponible en tant que ressource réseau partagée", _ "Attachée au réseau", _ "Cachée pour certains utilisateurs du réseau", _ "Directement connectée à l'ordinateur", _ "Mise en file d'attente activée si imprimante disponible", _ "Le spooler ne supprime pas les documents après impression", _ "Commence en premier les travaux qui sont en fin de spool", _ "Mise en file d'attente activée si imprimante indisponible", _ "Active l'impression bidirectionnelle", _ "Seuls les travaux de type de données brut sont spoolés", _ "Imprimante publiée dans le service d'annuaire du réseau") 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) wscript.echo msg wscript.echo String(len(msg),"-") num=0 for each Printer in PrinterSet num=num+1 wscript.echo wscript.echo FormatStrR(num,2) & ")--- " & Printer.Caption & " ---" Attrib=Cint(Printer.Attributes) firstattr=true For i=lbound(attr) To ubound(attr) If (Attrib and attr(i))=attr(i) Then If firstattr then prompt=" Attributs : " firstattr=false else prompt=" " End if wscript.echo prompt & desc(i) End If Next wscript.echo " Driver : " & Printer.DriverName wscript.echo " Port : " & Printer.PortName If Printer.Location<>"" Then _ wscript.echo " Emplacement : " & Printer.Location If Printer.ShareName<>"" Then _ wscript.echo " Nom de partage : " & Printer.ShareName next 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 '-------------------------------------------------------------------- Function FormatStrR(ch,lmax) l=len(ch) If l