krigor
Goto Top

AD, W2003Svr, Drucker aus CSV-Datei per Script dem Host zuordnen?

Hallo alle zusammen,

Die Gegebenheiten sind diese:
Ein Netzwerk, Windows 2003 R2 Domänencontroller und Active Directory.
Diverse Benutzergruppen in diversen OUs.
Nur Netzwerkdrucker, keine lokalen Drucker.

Die Problemstellung ist folgende:
Um die Netzwerkdrucker den Benutzern zur Verfügung zu stellen gibt es eine CSV-Datei in der
alle Host-Namen (etwa 300) und alle Drucker (etwa 140) zentral eingetragen sind, und zwar nach folgendem Muster:
Host-Name; Drucker1; Drucker2; Drucker3; Drucker4; Drucker5
Cronos; Dr010203; Dr020304; Dr040506; Dr050607; Dr060708
Torsos; Dr908070; Dr807060; Dr706050; Dr605040; Dr504030
und so weiter...
Die Hostnamen und die Druckernamen sind auf dem DHCP hinterlegt sowie DNS ist auch funktionstüchtig.
Jetzt kommt der Moment, wo der Frosch ins Wasser rennt:
Immer wenn sich ein Benutzer mit seinem Computer anmeldet soll ein Script gestartet werden,
das den Hostnamen des Computers der sich gerade anmeldet ermittelt und diesen dann in der CSV-Datei
sucht und die dahinterstehenden Drucker verbindet. Der erste in der CSV-Datei stehende Drucker soll
automatisch zum Standarddrucker werden. Also z.B. meldet sich ein beliebiger Benutzer an Computer
Cronos an soll er den Drucker Dr010203 als Standarddruckerzugewiesen bekommen und die
anderen Drucker zusätzlich.
Was sich hier grundlegend von allen bisher im Netz zu findenden Anleitungen unterscheidet ist der Fakt,
daß sich die Druckerzuweisung NICHT auf den Benutzer bezieht, sondern auf den Computernamen.
Der zweite Fakt ist, daß die Vorgabe besteht, keinerlei Fremdsoftware zu nutzen, es soll alles mit
Bordmitteln von Windows2003Server realsiert werden.
Der dritte Fakt ist, mir läuft die Zeit davon und ich habe nicht die Möglichkeit noch länger herumzuexperimentieren.

Ich habe schon etwas mit WSH experimentiert und ein Script erstellt, allerdings ist das ziemlicher Spaghetti-
Code, wie man wohl sagt und als zweites Problem stellt sich mir die Tatsache in den Weg, daß ich mit
Windows, AD und vor allem WSH keinerlei Erfahrungen habe, quasi Neuling bin.
Als mein Script list zwar den Computernamen des "Anmelder-Host" richtig aus und findet auch die passende
Zeile in der CSV-Datei, aber beim Vergleich beider Namen und der Druckerzuweisung hört es dann aber auf.

Ich bemühe mich, den Code hier schnellstmöglich zu posten.
Möglicherweise hat jemand eine zündende Idee.
Persönlich finde ich es auch nicht übel, alle Drucker zentral in einer CSV-Datei zu "verwalten".

Für meinen ersten Beitrag hier, ganz schön viel, ich weis, aber hier ist SOS angesagt.

Viele Grüße,
Krigor

Content-Key: 71752

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

Printed on: April 26, 2024 at 18:04 o'clock

Member: Krigor
Krigor Oct 24, 2007 at 07:18:53 (UTC)
Goto Top
Hier nun mein "Script".

'***********************************************************************  
' * * * * * * * * * * * * * * * * * * * * * * * * * * *  
'***********************************************************************  
'*	 Plattform:	Windows2003Server, x86		                            *  
'*	 Umgebung:	WindowsScriptingHost		                            *  
'*	 Dateiname:	PrinCon.vbs			                            *  
'*	 Arbeitstitel:	wsh_playground_6.vbs			            *  
'*	 Funktion:		Verbinde alle Drucker zu einem der Domain	            *  
'*                              	gehoerenden Host, setze den Standarddrucker (CSV)        *  
'*			ACHTUNG: Computerbezogen, nicht Benutzerbezogen !!    *  
'*	 Datum:		22. Oktober 2007			                             *  
'***********************************************************************  

' ===== legeVariablen explicit fest  
OPTION EXPLICIT	
' ===== Konstanten definieren  
CONST CSV_ORDNER = "Z:\Eigene Dateien\_code_bin\"  
CONST CSV_DATEI = "prn-csv.csv"  
CONST ForReading = 1
' ===== Variablen deklarieren  
DIM obj_NetHost, obj_NetPrnServer, WSHShell, FSO, obj_FSO, obj_fileExist
DIM FileIn, FileOut, TXT, TXT2
DIM Ar_Host, Ar_Prn, Ar_Prn0, Ar_Prn1, Ar_Prn2, Ar_Prn3, Ar_Prn4 
DIM host_current, host_fromCSV
PUBLIC status1, status2, status3, status4, status5, status6, status7

' ===== erzeuge ein Netzwerk-Objekt  
SET obj_NetHost = WScript.CreateObject ("WScript.Network")  
' ===== check computername here  
host_current = ""   
DO
	host_current = obj_NetHost.ComputerName
LOOP WHILE (host_current="")  

SET obj_FSO = CreateObject("Scripting.FileSystemObject")  
SET obj_fileExist = obj_FSO.GetFile(CSV_DATEI) 'zum pruefen, ob Datei leer ist  
IF obj_fileExist.Size > 0 THEN	
	'########################  HOT Code here: ########################  
	SET WSHShell = WScript.CreateObject("WScript.Shell")  
	SET FSO = CreateObject("Scripting.FileSystemObject")  
	SET FileIn = FSO.OpenTextFile(CSV_DATEI,1,TRUE)
	
	status1 = 0	
	DO WHILE NOT (FileIn.atEndOfStream)
		TXT = FileIn.ReadLine
		Ar_Host = Split(TXT,";",-1,1)  
		host_fromCSV = Ar_Host(0)
		Ar_Prn = Split(TXT,";",-1,1)  
		Ar_Prn0 = Trim(Ar_Prn(1))
		Ar_Prn1 = Trim(Ar_Prn(2))
		Ar_Prn2 = Trim(Ar_Prn(3))
		Ar_Prn3 = Trim(Ar_Prn(4))
		Ar_Prn4 = Trim(Ar_Prn(5))
		IF UCase(Trim(host_fromCSV)) > UCase(Trim(host_current)) THEN
		   WScript.Echo UCase(host_current) & " <---------> " & UCase(host_fromCSV) & vbCRLF & _  
						 "--------------------------------------------------------" & vbCRLF & _  
						 "Drucker 1: " & Ar_Prn0 & vbCRLF & _  
						 "Drucker 2: " & Ar_Prn1 & vbCRLF & _  
						 "Drucker 3: " & Ar_Prn2 & vbCRLF & _  
						 "Drucker 4: " & Ar_Prn3 & vbCRLF & _  
						 "Drucker 5: " & Ar_Prn4  
			status1 = 1
			EXIT DO
		END IF
	LOOP
	
' ===== Auswertung des Einlesens der CSV-Datei	  
SELECT CASE status1
	CASE 0
		WScript.Echo "Passender Eintrag in CSV-Datei nicht gefunden!" & vbCRLF _  
				   & "Druckerzuweisung wird abgebrochen!"  
	CASE 1
		WScript.Echo "Drucker: " & Ar_Prn0 &" zuweisen?"  
		SET obj_NetPrnServer = WScript.CreateObject("WScript.Network")  
		obj_NetPrnServer.AddPrinterConnection "LPT1", "\\print\" & Ar_Prn0 & ""   'DR102012"  
		'obj_NetServer.RemovePrinterConnection "LPT1", TRUE, TRUE  
		
	CASE ELSE
		WScript.Echo "Schwerer Fehler!"  
		objNetwork.RemovePrinterConnection
END SELECT
	
	'########################  End HOT Code here ########################  
	
ELSE
	Wscript.Echo "Die Datei > " & CSV_DATEI & " < ist leer oder existiert nicht."  
END IF

WScript.Quit
'*********************************************************************  
'***                                                      E N D E                                                             ***  
'*********************************************************************  

Weiter komme ich einfach nicht.
Mein Gedanke war, die CSV-Datei öffnen, den Inhalt (zeilenweise) in ein Array einzulesen, dann das erste Element (also den Inhalt der ersten Spalte) mit dem ausgelesenen Hostnamen zu vergleichen und dann die Druckerzuordnung zu starten und im dritten Schritt den Standarddrucker zuzuweisen.
Oder hat jemand vielleicht eine andere Idee zur Herangehensweise?

Grüße,
Krigor