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-Key: 156481

Url: https://administrator.de/contentid/156481

Printed on: April 19, 2024 at 19:04 o'clock

Mitglied: 60730
60730 Dec 07, 2010 at 11:05:36 (UTC)
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ß
Member: Skyemugen
Skyemugen Dec 07, 2010 at 11:16:32 (UTC)
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é
Member: Azubi1452
Azubi1452 Dec 07, 2010 at 13:18:52 (UTC)
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
Member: manbar
manbar Dec 07, 2010 at 14:10:11 (UTC)
Goto Top
weihst du uns auch ein?

bin neugierig auf dein script, ich bräuchte sowa in naher zukunft auch..
Member: Azubi1452
Azubi1452 Dec 07, 2010 at 14:23:50 (UTC)
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
Member: Azubi1452
Azubi1452 Dec 08, 2010 at 10:18:08 (UTC)
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ß