azubi1452
Goto Top

Am Server anmelden-Drucker auslesen-für jeden Server eine txt- Datei erstellen- kleiner Fehler im Skript

Hallo zusammen,

ich möchte, dass das Skript, in einer Textdatei angegebenen Server, durchläuft und dort jeweils nach installierten Drucker schaut und diese in jeweils eine Text-Datei aufschreibt.
Es klappt schon ganz viel, ich habe nur das Problem, dass im Moment nur eine Textdatei erstellt wird egal für wie viele Server. In dieser Ergebnis-Textdatei stehen dann auch lediglich die Drucker von einem Server. Alle anderen Server in der tssserver-Datei werden einfach vergessen - weiß jemand was ich falsch gemacht habe ?

Zum Verständnis:
In der Datei: tssserver.txt stehen alle Server von denen ich die installierten Drucker auslesen möchte
und die Datei: "C:\druckerliste_" & strServer &".txt" soll für jeden Server seperat erstellt werden.

Danke schonmal.

Hier mal mein Skript: (Ich hoffe, es ist verständlich)

'1. Schritt: An den Servern anmelden (Server1, Server2 usw.)'  

Const WbemAuthenticationLevelPktPrivacy = 6
Set objWbemLocator = CreateObject("WbemScripting.SWbemLocator")  
Set objFSO = CreateObject("Scripting.FileSystemObject")  
Set oArg = wscript.arguments
strNamespace = "root\cimv2"  
'--------Datei einlesen und in ein Array schreiben--------'  
Set fso = CreateObject("Scripting.FileSystemObject")  
Set oFile = fso.OpenTextFile("C:\tssserver.txt")  
i=0
' ---------Erstmal zählen wieviele Einträge----------  
while not oFile.AtEndOfStream
i=i+1
oFile.ReadLine
Wend
oFile.Close
' Array definieren  
REDIM arrServer(i)
Set oFile = fso.OpenTextFile("C:\tssserver.txt")  
i=0
' Jetzt Werte ins Array übernehmen  
while not oFile.AtEndOfStream
arrServer(i)=oFile.ReadLine
i=i+1
Wend

servername   =0
servernummer =0
servernummerT =0
'--------Servernamen befinden sich nun im Array--------  
'-------Für jeden Server eine extra datei anlegen ! '  
'--------------------------------------------Schleifen- ANFANG-------------  
For Each strServer In arrServer

    ifertig = "False"  
    i2fertig = "False"  

    If isOnline(strServer) Then

'--------------------------------------------Username und Passwort---------------------------------------------------'          
strUser = "domäne\admin"  
strPassword = "PW"  
'--------------------------------------------Einstellung Ende-------------------------------------------------------'  
'--------------------------------------------Am Server anmelden-------------------------------------------------------'  
        Set objWMI = objwbemLocator.ConnectServer _
            (strServer, strNamespace, strUser, strPassword)
        objWMI.Security_.authenticationLevel = WbemAuthenticationLevelPktPrivacy  
'-------------------------Hier muss die Abfrage kommen---------------------------------------------------------------'  
'Set objWMIService = GetObject("winmgmts:\\domäne"& strServer &"\root\cimv2")  
Set colItems = objWMI.ExecQuery("Select * from Win32_Printer",,48)  
Set Ausgabedatei = objFSO.CreateTextFile("C:\druckerliste_" & strServer &".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 "-----------------------------------------"  
Next
              
              servername= servername +1             
              servernummer = servernummer +1

                End If
Next
oFile.Close
'  


'--------------------------------------------Schleifen- ENDE-------------  
   MsgBox "Fertig!", Abgeschlossen, vbInfo  

Content-Key: 155158

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

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: bastla
bastla 16.11.2010 um 11:37:42 Uhr
Goto Top
Hallo Azubi1452!

Ersetze mal die ohnehin unnötigen Zeilen 62 und 63 durch
Ausgabedatei.Close
Ansonsten noch eine Anmerkung:
Das Einlesen der Servernamen in ein Array (Zeilen 11 - 26) ließe sich auch etwas face-wink knapper formulieren:
arrServer = Split(fso.OpenTextFile("C:\tssserver.txt").ReadAll, vbCrLf)
Grüße
bastla
Mitglied: Azubi1452
Azubi1452 16.11.2010 um 14:04:23 Uhr
Goto Top
Hallo bastla,

ich weiß was das Problem war....
ich habe in meiner Server.txt Datei immer wirklich nur die Servernamen - ohne die Domäne - hingeschrieben.
Mit Domänenangabe gehts face-smile
Mitglied: bastla
bastla 16.11.2010 um 14:48:29 Uhr
Goto Top
Hallo Azubi1452!

Selber rausfinden macht ohnehin mehr Spaß face-wink ...

Grüße
bastla
Mitglied: Azubi1452
Azubi1452 23.11.2010 um 16:51:40 Uhr
Goto Top
Hallo zusammen,

ich benutze im Skript ja die WMI Klasse: Win32_Printer. In der stehen aber leider nur die Treiber drinnen die von Druckern benutzt werden.
Nun möchte ich aber auch, oder gerade, die Treiber auffinden die zwar auf dem Terminalserver installiert sind, aber von keinem Drucker verwendet werden.

Sinn und Zweck des ganzen ist, die Liste dann mit einer vom Printserver zu vergleichen und als nächsten Schritt dann alle Treiber die nicht verwendet werden zu löschen.

Kann mir jemand sagen wie ich an alle installierten Treiber komme ?

Danke schonmal,

Gruß,
Azubi
Mitglied: Azubi1452
Azubi1452 30.11.2010 um 12:34:32 Uhr
Goto Top
Hallo,

ich habe nun herausgefunden, dass alle installierten Druckertreiber in folgendem Regkey stehen:
“HKLM\System\CurrentControlSet\Control\Print\Printers”

nun möchte ich diesen Registry-Zweig auslesen. Dort hat nämlich jeder installierte Treiber einen eigenen Schlüssel bzw. Ordner.
Am Ende möchte ich die intslalierten Treiber einfach in einer Variable gespeichert haben.

HIer habe ich schon mal ein schönes Beispiel gefunden:

Dim sKey
Dim sUser
Dim sOrg
DIm WshShell

set WshShell = CreateObject("WScript.Shell")   

sKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" & _   
       "Windows NT\CurrentVersion\RegisteredOrganization"  
sOrg = WshShell.RegRead(sKey)

sKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\" & _   
       "Windows NT\CurrentVersion\RegisteredOwner"  
sUser = WshShell.RegRead(sKey)

wscript.echo "Diese Windows-Kopie wurde auf den Namen '" & sUser & _   
             "' der Firma '" & sOrg & "' registriert."  
 

Aber leider ist hier immer ein bestimmter Wert in dem Pfad angegeben. Ich möchte ja aber einen ganzen Zweig auslesen.
Gibt es auch für einen Pfad in der Registry Platzhalter ? Ich habe schon mit * und _ versucht - haut aber alles nicht so hin.

Danke schonmal,

Gruß,
Azubi

EDIT: Hier habe ich unter: "Auflisten vorhandener Schlüssel und Unterzweige" genau sowas gefunden - aber leider ist das in VBNet geschrieben - Kann man dies ohne großen Aufwand vielleicht umschreiben ? http://msdn.microsoft.com/de-de/library/bb979300.aspx
Mitglied: bastla
bastla 30.11.2010 um 14:48:09 Uhr
Goto Top
Hallo Azubi1452!

Bei ActiveXperts findest Du eine Zusammenfassung diverser Scripts (auch) aus dem technet-Script Center ...

Grüße
bastla