Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

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

Mitglied: Krigor

Krigor (Level 1) - Jetzt verbinden

24.10.2007, aktualisiert 09:18 Uhr, 2867 Aufrufe, 1 Kommentar

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
Mitglied: Krigor
24.10.2007 um 09:18 Uhr
Hier nun mein "Script".

01.
'***********************************************************************
02.
' * * * * * * * * * * * * * * * * * * * * * * * * * * *
03.
'***********************************************************************
04.
'*	 Plattform:	Windows2003Server, x86		                            *
05.
'*	 Umgebung:	WindowsScriptingHost		                            *
06.
'*	 Dateiname:	PrinCon.vbs			                            *
07.
'*	 Arbeitstitel:	wsh_playground_6.vbs			            *
08.
'*	 Funktion:		Verbinde alle Drucker zu einem der Domain	            *
09.
'*                              	gehoerenden Host, setze den Standarddrucker (CSV)        *
10.
'*			ACHTUNG: Computerbezogen, nicht Benutzerbezogen !!    *
11.
'*	 Datum:		22. Oktober 2007			                             *
12.
'***********************************************************************
13.

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

27.
' ===== erzeuge ein Netzwerk-Objekt
28.
SET obj_NetHost = WScript.CreateObject ("WScript.Network")
29.
' ===== check computername here
30.
host_current = "" 
31.
DO
32.
	host_current = obj_NetHost.ComputerName
33.
LOOP WHILE (host_current="")
34.

35.
SET obj_FSO = CreateObject("Scripting.FileSystemObject")
36.
SET obj_fileExist = obj_FSO.GetFile(CSV_DATEI) 'zum pruefen, ob Datei leer ist
37.
IF obj_fileExist.Size > 0 THEN	
38.
	'########################  HOT Code here: ########################
39.
	SET WSHShell = WScript.CreateObject("WScript.Shell")
40.
	SET FSO = CreateObject("Scripting.FileSystemObject")
41.
	SET FileIn = FSO.OpenTextFile(CSV_DATEI,1,TRUE)
42.
	
43.
	status1 = 0	
44.
	DO WHILE NOT (FileIn.atEndOfStream)
45.
		TXT = FileIn.ReadLine
46.
		Ar_Host = Split(TXT,";",-1,1)
47.
		host_fromCSV = Ar_Host(0)
48.
		Ar_Prn = Split(TXT,";",-1,1)
49.
		Ar_Prn0 = Trim(Ar_Prn(1))
50.
		Ar_Prn1 = Trim(Ar_Prn(2))
51.
		Ar_Prn2 = Trim(Ar_Prn(3))
52.
		Ar_Prn3 = Trim(Ar_Prn(4))
53.
		Ar_Prn4 = Trim(Ar_Prn(5))
54.
		IF UCase(Trim(host_fromCSV)) > UCase(Trim(host_current)) THEN
55.
		   WScript.Echo UCase(host_current) & " <---------> " & UCase(host_fromCSV) & vbCRLF & _
56.
						 "--------------------------------------------------------" & vbCRLF & _
57.
						 "Drucker 1: " & Ar_Prn0 & vbCRLF & _
58.
						 "Drucker 2: " & Ar_Prn1 & vbCRLF & _
59.
						 "Drucker 3: " & Ar_Prn2 & vbCRLF & _
60.
						 "Drucker 4: " & Ar_Prn3 & vbCRLF & _
61.
						 "Drucker 5: " & Ar_Prn4
62.
			status1 = 1
63.
			EXIT DO
64.
		END IF
65.
	LOOP
66.
	
67.
' ===== Auswertung des Einlesens der CSV-Datei	
68.
SELECT CASE status1
69.
	CASE 0
70.
		WScript.Echo "Passender Eintrag in CSV-Datei nicht gefunden!" & vbCRLF _
71.
				   & "Druckerzuweisung wird abgebrochen!"
72.
	CASE 1
73.
		WScript.Echo "Drucker: " & Ar_Prn0 &" zuweisen?"
74.
		SET obj_NetPrnServer = WScript.CreateObject("WScript.Network")
75.
		obj_NetPrnServer.AddPrinterConnection "LPT1", "\\print\" & Ar_Prn0 & ""   'DR102012"
76.
		'obj_NetServer.RemovePrinterConnection "LPT1", TRUE, TRUE
77.
		
78.
	CASE ELSE
79.
		WScript.Echo "Schwerer Fehler!"
80.
		objNetwork.RemovePrinterConnection
81.
END SELECT
82.
	
83.
	'########################  End HOT Code here ########################
84.
	
85.
ELSE
86.
	Wscript.Echo "Die Datei > " & CSV_DATEI & " < ist leer oder existiert nicht."
87.
END IF
88.

89.
WScript.Quit
90.
'*********************************************************************
91.
'***                                                      E N D E                                                             ***
92.
'*********************************************************************
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
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
PS Werte CSV-Datei in AD Attribut
gelöst Frage von lupoloBatch & Shell3 Kommentare

Hallo Leute, ich komm grad irgendwie nicht weiter. Wir müssten für jeden AD Benutzer ein AD-Attribut (scanPath) mit dem ...

Batch & Shell

Mehrere AD Benutzer aus CSV Datei mit PowerShell erstellen

Frage von windelterroristBatch & Shell1 Kommentar

Hallo Admins :) Mein Skript soll mehrere AD User aus einer CSV Datei per PowerShell erstellen. Soweit funktioniert das ...

Batch & Shell

AD Usernamen in CSV Vergleichen

gelöst Frage von HainoonBatch & Shell32 Kommentare

Hallo Liebe Community, Ich hatte zu diesem Thema schon einen ähnlichen Thread offen, habe das Thema vorerst auf Eis ...

Windows 7

Suche nach virtuellem Drucker bzw. Druckertreiber zum Druck in CSV oder TXT-Datei

gelöst Frage von SinzalWindows 76 Kommentare

Hallo Admins, vielleicht ist es eine super-primitive Frage, aber ich habe bisher kein zufriedenstellendes Ergebnis ergoogeln können: In einem ...

Neue Wissensbeiträge
Firewall
PfSense 2.5.0 benötigt doch kein AES-NI
Information von ChriBo vor 1 TagFirewall1 Kommentar

Hallo, Wie sich einige hier erinnern werden hat Jim Thompson in diesem Aritkel beschrieben, daß ab Version 2.5.0 ein ...

Internet
Copyright-Reform: Upload-Filter
Information von Frank vor 3 TagenInternet1 Kommentar

Hallo, viele Menschen reden aktuell von Upload-Filtern. Sie reden darüber, als wären es eine Selbstverständlichkeit, das Upload-Filter den Seitenbetreibern ...

Google Android

Blokada: Tracking und Werbung unter Android unterbinden

Information von AnkhMorpork vor 3 TagenGoogle Android1 Kommentar

In Ergänzung zu meinem vorherigen Beitrag: Blokada efficiently blocks ads, tracking and malware. It saves your data plan, makes ...

Google Android
Facebooks unsichtbare Datensammlung
Information von AnkhMorpork vor 3 TagenGoogle Android3 Kommentare

Rund 30 Prozent aller Apps im Play-Store nehmen Kontakt zu Facebook auf, sobald man sie startet. So erfährt der ...

Heiß diskutierte Inhalte
Backup
Wo installiert man Veeam bei SoHo?
Frage von EDVMan27Backup14 Kommentare

Hallo, nachdem ich die neue Veeam CE bei mir getestet habe, wollte ich es einmal bei einem Kunden testen. ...

CPU, RAM, Mainboards
Kann eine "virtuelle CPU" bei VMware die Leistung einer phys. CPU entsprechen ?
Frage von Troja71CPU, RAM, Mainboards11 Kommentare

Eine Software fordert im Betrieb 8 CPU mit x GHz Taktung. Verfügbar ist "nur" eine VM mit 8 vCPUs ...

Batch & Shell
Tasklist überprüfen
Frage von IleiesBatch & Shell10 Kommentare

Hallo zusammen, Wie kann ich in Batch überprüfen, ob gerade der Prozess "Skype.exe" ausgeführt wird? Also nicht so dass ...

SAN, NAS, DAS
Aktuelle Bauvorschläge für NAS
gelöst Frage von zuckelSAN, NAS, DAS9 Kommentare

Hallo zusammen, ich möchte gerne ein NAS. Ein NAS mit ZFS und FreeNAS und mehr als 4 Festplatten (auch ...