azubi1452
Goto Top

Wo befinden sich alle installierten Druckertreiber in der Registry ?

Hallo zusammen,

ich möchte alle überflüssigen Druckertreiber von unseren Terminalserver deinstallieren. Dazu möchte ich alle installierten Druckertreiber per Skript auslesen.
Das Skript habe ich bereits fertig.

Nur fehlt mir der Speicherort in der Registry.

Hier:
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices"
und hier:
hkey_local_machine\system\currentcontrolset\control\print\printers\

stehen leider nur alle verwendete Drucker.

Wenn man den Ordner Drucker und Faxgeräte öffnet, da auf "Datei - Servereigenschaften - Treiber" geht, sieht man alle installierten Druckertreiber.
Und genau die Liste möchte ich aus der Registry auslesen.

Wisst ihr wo in der Registry sich die Druckertreiber befinden ?

Danke schonmal.

Gruß,
Azubi

Content-ID: 156481

Url: https://administrator.de/forum/wo-befinden-sich-alle-installierten-druckertreiber-in-der-registry-156481.html

Ausgedruckt am: 05.02.2025 um 15:02 Uhr

60730
60730 07.12.2010 um 12:05:36 Uhr
Goto Top
moin,

darf man fragen "warum"?

Du hast keinen Geschwindigkeits oder sonstigen Vorteul, wenn du nicht benutzte Druckertreiber löschst.
Die werden nur dann geladen, wenn Sie gebraucht werden.

Gruß
Skyemugen
Skyemugen 07.12.2010 um 12:16:32 Uhr
Goto Top
Aloha,

Hm, die Zeit wo du versuchst den Ort in der registry herauszubekommen, hättest du schon alle ungewollten manuell entfernen können ;)

greetz André
Azubi1452
Azubi1452 07.12.2010 um 14:18:52 Uhr
Goto Top
Mahlzeit,

ich möchte alle unnötigen Fehlerquellen ausschließen und außerdem dafür sorgen, dass alle Terminalserver auf dem gleichen Stand sind.
@Skyemugen: jop, ich glaube dass werde ich nun auch machen müssen, sind ja nur ca. 50 Terminalserver ^^
Eigentlich schade, das Skript für diese Aufgabe habe ich nämlich gerade vorhin fertigstellen können.

Danke für eure Antworten.

Bis dann
manbar
manbar 07.12.2010 um 15:10:11 Uhr
Goto Top
weihst du uns auch ein?

bin neugierig auf dein script, ich bräuchte sowa in naher zukunft auch..
Azubi1452
Azubi1452 07.12.2010 um 15:23:50 Uhr
Goto Top
klar ;)

Hier einmal die Version, die einen bestimmten Zweig in der Registry ausliest. Allerdings, wie gesagt nur die tatsächlich verwendeten Drucker.
 
Const HKEY_CURRENT_USER = &H80000001
strComputer = "."  
sKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Devices"  

Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _  
strComputer & "\root\default:StdRegProv")  

If oReg.EnumValues(HKEY_CURRENT_USER, sKeyPath, _
aValueNames, aValueTypes) = 0 Then

'Wenn keine Werte vorhanden sind, ist 'aValueNames' null, wenn welche vorhanden sind  
'ist es ein Variant-Array. Als IsNull u/o VarType anwenden  

If not isnull(aValueNames) Then
WScript.Echo "Anzahl Values in HKCU " & sKeyPath & " -> " _  
& UBound(aValueNames) + 1
For i = 0 To UBound(aValueNames)
WScript.Echo aValueNames(i)
Next
Else
WScript.Echo "Keine Werte im Key vorhanden!"  
End If
Else
WScript.Echo "Key nicht vorhanden oder Fehler beim Enumerieren der Werte!"  
End If


'Software\Microsoft\Windows NT\CurrentVersion\Devices" listet nur die verwendeten Drucker auf und nicht alle installierten !  
' hkey_local_machine\system\currentcontrolset\control\print\printers\  

Dieses Skript arbeitet mit der Win32_Printer Klasse und kann somit auch einige Infos der Treiber auslesen - aber auch hier leider nicht alle installierten Treiber.
Genau auf die korrekten Pfad-angaben schauen...sind so einige versteckt im Skript...

'####################################################################################################################################################'  
'#Dieses Skript soll sich auf allen Terminalserver anmelden und checken welche Druckertreiber jeweils installiert sind.                             #'  
'#Die Infos sollen dann in eine Excel oder TXT- DAtei übersichtlich dargestellt werden und später zum Abgleich verschiedenener Probleme helfen      #'  
'#Als nächstes sollen die Listen jeweils mit der Liste von dem Printserver abgeglichen werden und die Unterschiede übersichtlich dargestellt werden #'  
'####################################################################################################################################################'  
'Option Explicit  

Dim i, j, fso, flgDouble, objFile, strArray (), strLine
Dim Abgeschlossen, objWbemLocator, vbInfo, objFSO, oArg, oFile, strNamespace, strUser, strPassword
Dim  strServerpfad

Const WbemAuthenticationLevelPktPrivacy = 6
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set oArg = wscript.arguments
'--------------------------------------------Einstellung Anfang--------------------------------'  
strNamespace  = "root\cimv2"          
strUser       = "Domäne\Admin"   
strPassword   ="PW"  
strServerpfad = "Pfad"  
'strAusgabe  =  "Zeile 36"  
'--------------------------------------------Einstellung Ende----------------------------------'  
'---------------Datei einlesen und in ein Array schreiben--------------------------------------'  
arrServer = Split(objFSO.OpenTextFile(strServerpfad).ReadAll, vbCrLf)
Set oFile = objFSO.OpenTextFile(strServerpfad)
'--------------------------------------------Schleifen- ANFANG---------------------------------'  
For Each strServer In arrServer

    ifertig = "False"  
    i2fertig = "False"  

    If isOnline(strServer) Then
    
        Set objWMI = objwbemLocator.ConnectServer _
                     (strServer, strNamespace, strUser, strPassword)
        objWMI.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy  

Set colItems = objWMI.ExecQuery("Select * from Win32_Printer",,48)  
Set Ausgabedatei = objFSO.CreateTextFile("C:\test\doppelt\Druckerliste_" & strServer &"_doppelt.txt",1)   

  For Each objItem in colItems
  'Ausgabedatei.WriteLine "Servername: " & strServer   
  'Ausgabedatei.WriteLine "Drucker: " & objItem.Name  
  'Ausgabedatei.WriteLine "Model und Kommentar: " & objItem.Comment  
  'Ausgabedatei.WriteLine "DriverName: " & objItem.DriverName  
  Ausgabedatei.WriteLine objItem.DriverName
  'Ausgabedatei.WriteLine "-----------------------------------------"  
  Next
  Ausgabedatei.Close

'##### Hier wird nun gecheckt ob es doppelte Treiber gibt, die dann gelöscht werden'  
'Ein = "Pfad"  
Aus = "C:\test\Druckerliste_" & strServer &".txt"  

'Set fso = CreateObject("Scripting.FileSystemObject")  
Set d = CreateObject("Scripting.Dictionary")  

ZeilenEin = Split(objFSO.OpenTextFile("C:\Druckerlisten\doppelt\Druckerliste_" & strServer &"_doppelt.txt").ReadAll, vbCrLf)  
For Each Zeile In ZeilenEin
    If Not d.Exists(Zeile) Then d.Add Zeile, Dummy
Next

objFSO.CreateTextFile(Aus).Write Join(d.Keys, vbCrLf)

  End If
Next
oFile.Close
'--------------------------------------------Schleifen- ENDE---------------------------------'  
objFSO.DeleteFile "C:\test\doppelt\*.*"  
'-------------------------------Ende--------------------------------------------'  
function IsOnline(host)
set WshShell = CreateObject("Wscript.Shell")  
set temp = wshshell.Exec ("ping.exe -n 1 -w 100 "&host)  
dummy = temp.StdOut.ReadAll
IF instr(1,dummy,"Antwort") >0 THEN  
isonline = true
ELSE
isonline = false
END IF
end Function
'------------------------Fertig----------------------------------------------'  
MsgBox "Fertig!", Abgeschlossen, vbInfo   

Gruß,
Azubi
Azubi1452
Azubi1452 08.12.2010 um 11:18:08 Uhr
Goto Top
Moin,

nur zur Info: Hat sich erledigt.

Habe ein passendes Beispiel gefunden.

http://gallery.technet.microsoft.com/scriptcenter/en-us/f79f2fe5-1528-4 ...

Dieses Skript listet wirklich alle installierten Drucktreiber auf. Es wird die WMI Klasse: Win32_PrinterDriver verwendet.

Ich habe mir immer nur diese WMIKlasse angeschaut: Win32_Printer....

Gruß