Installation imprimantes depuis fichier - vérif si existe
Salut les gars,
Ne pouvant pas mettre en place de GPO pour ce besoin, je boss sur un petit script pour installer des imprimantes basé sur un fichier CSV.
Cette partie fonctionne bien, plutôt basique.
En revanche ce que je n'arrive pas c'est à détecter si la/les imprimantes existe déjà sur le poste.
En effet à chaque fois que je lance le script sur un poste, l'imprimante change de nom et devient (copie x) --> Ca ne me plait pas !
J'ai trouvé une fonction mais qui ne répond aux besoins. La fonction exit si UNE imprimante est trouvé, alors que je souhaite que les x soient bien présentes et qu'elles ne soient pas réinstaller si déjà présente.
Voici mon script :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| 'Declaration des constantes
Const ForReading = 1 ' means: open for reading
Const TristateDefault = -2 ' means: read as ASCII
Set objShell = WScript.CreateObject ("WSCript.shell")
Set objFSO = CreateObject("Scripting.fileSystemObject")
Set WshNetwork = CreateObject("WScript.Network")
'-- Recupération de répertoire courant
fullPath = WScript.ScriptFullName
Set objFile = objFSO.GetFile(fullPath)
'-- Définition du répertoire Courant
StrCurrentDir = objFSO.GetParentFolderName(objFile)
'Chemin du fichier csv
Dim fso
Path = Left(WScript.ScriptFullName, InStr(WScript.ScriptFullName, WScript.ScriptName)-1)
INPUT_PATH = PATH & "Printer_list_2017.csv"
'-- Reccuperation des arguments
strSite = Wscript.Arguments(0)
'strSite = "TOTO"
'Search in CSV file
Set inputFile = objFSO.GetFile(INPUT_PATH)
Set inputFileStream = inputFile.OpenAsTextStream(ForReading, TristateDefault)
Do until (inputFileStream.atEndOfStream)
aktInputLine = inputFileStream.ReadLine
entries = Split(aktInputLine, ",")
'Parcours le fichier csv pour reccuperer les informations relative aux imprimantes du site
For Each line In entries
If line = strSite Then
strModel = entries (1)
strPrinterName = entries (2)
strIpPrinter = entries (3)
Select Case strModel
Case "CANON":
strDriver = "Canon Generic PCL6 Driver"
'Windows 7
'strDrivePath = "C:\Windows\System32\DriverStore\FileRepository\cnp60ma64.inf_amd64_neutral_da93e7535d5504d9\CNP60MA64.INF"
strDrivePath = "C:\Temp\Drivers Canon\Install new driver\Driver\CNP60MA64.INF"
Case Else
'wscript.echo "Model not found"
wscript.quit
End Select
'Configuration du port
objShell.run "cscript C:\Windows\System32\Printing_Admin_Scripts\en-US\prnport.vbs -a -r IP_" & strIpPrinter & " -h " & strIpPrinter & " -o raw", 6, True
'Check if exist
printerExists (str)
'Configuration de l'imprimante
objShell.run "rundll32 printui.dll,PrintUIEntry /if /b " & strPrinterName & " /f """ & strDrivePath &""" /r IP_" & strIpPrinter & " /m """ & strDriver & Chr(34), 6, True
End if
Next
Loop
Function printerExists(str)
printerExists = "L'imprimante " & str & " va être installé"
Dim objWMIService
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Dim colPrinters
Set colPrinters = objWMIService.ExecQuery("Select * From Win32_Printer")
Dim objPrinter
For Each objPrinter In colPrinters
If objPrinter.Name = str Then
printerExists = "L'imprimante " & str & " existe déjà"
Wscript.Quit
Exit For
End If
Next
End Function |
Une idée pour faire un check ?
Merci :)