Aufgrund einer Drucker-Migration stand ich kürzlich vor der Frage, wie wir all die verbundenen Netzwerkdrucker unserer Anwender herausbekommen könnten, um die Zugehörigkeiten anschließend in Active Directory Gruppen überführen zu können. Bis dato hatten sich die Anwender die freigegeben Drucker auch selbst verbinden können.
Um nun von jedem Benutzer die Drucker herauszubekommen, habe ich mich mittels einem VBS-Skript bedient, dass ich im TechNet-Skriptcenter gefunden hatte. Dieses band ich dann leicht modifiziert in eine Gruppenrichtlinie bzw. in eine Anmeldeskript, dass mir an eine definierte Adresse per BLAT eine TXT-Datei schickte. Die entsprechenden Daten waren dann anschließend noch zusammenzuführen. Ein wenig Quick&Dirty, aber es erfüllte seinen Zweck:
List_Connected_Printers.VBS
Const ForWriting = 2 Set objNetwork = CreateObject("Wscript.Network") strName = objNetwork.UserName strDomain = objNetwork.UserDomain strUser = strDomain & "\" & strName strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") set shell = CreateObject("WScript.Shell") Set colPrinters = objWMIService.ExecQuery _ ("Select * From Win32_Printer Where Local = FALSE") strComputer2 = shell.ExpandEnvironmentStrings("%Computername%") For Each objPrinter in colPrinters strText = strText & strComputer2 & ";" & strUser & ";" & objPrinter.Name & vbCrLf Next Set objFSO = CreateObject("Scripting.FileSystemObject") strPath = shell.ExpandEnvironmentStrings("%Appdata%") strFileName = "Printers_" & strName & "_" & strComputer2 & ".txt" strFullName = objFSO.BuildPath(strPath, strFileName)Set objFile = objFSO.CreateTextFile _ (strFullname, ForWriting, True) objFile.Write strText objFile.Close
Das Skript holt sich alle verbundenen Drucker des angemeldeten Benutzers, schreibt sie in eine Datei mit dem Muster %COMPUTERNAME%;%USERNAME%;%DRUCKER%
und speichert sind als Printers_%USERNAME%_%COMPUTERNAME%.txt
ab. Die Datei wird anschließend im Anwendungsdaten-Verzeichnis (%APPDATA%) abgelegt.
Das VBS-Skript wird dann mittels einer simplen Batch-Datei, die als Anmeldeskript fungiert, aufgerufen. Diese Batch-Datei enthält zudem einen BLAT-Befehl, um mir die erstellte TXT-Datei per Mail zuzuschicken:
ConPrin.cmd
REM ##################################################### REM Check all connected network printers of AD-USERS REM 2011, https://www.tobbis-blog.de REM ##################################################### IF EXIST "%Appdata%\Printers_%username%_%computername%.txt" goto Ende CScript //Nologo %~dp0List_Connected_Printers.vbs %~dp0blat -body "Connected Printers of %username% / %computername%" -server [SMTP-SERVER] -to [ZIEL-ADRESSE] -f [ABSENDER] -s "Connected Printers of %username% on %computername% (v2)" -attach "%appdata%\Printers_%username%_%computername%.txt" :Ende
Wer neben einer solchen Skript-Lösung, einen eleganteren Weg kennt, möge bitte einen Kommentar hinterlassen, würde mich sehr interessieren.