223

Frage ist gelöst
Skript zur automatischen Verteilung von Druckern anhand von Computerkonten in Active Directory Gruppen

Mitglied: MisterIX
05.02.2009
14:25:56 Uhr
3123 Aufrufe
4 Antworten
In großen Firmen ist es praktisch Drucker anhand von Computerkonten zu verteilen, da so immer Drucker in der nähe des Rechners gemappt werden können, auch wenn Leute aus unterschiedlichen Abteilungen sich anmelden.
Nur ab Server 2003 R2 kann man das über Active Directory lösen. Alle älteren Serverversionen (also auch Server 2003) unterstützen dies nicht. Daher habe ich ein Skript geschrieben, das mit der Freeware Kixtart dieses Problem löst, indem es prüft ob Computerkonten Teil einer bestimmten Active Directory Gruppe sind.
Die Kix32.exe und das Skript müssen im Netlogon Ordner des Domänencontrollers liegen.

Aus einer normalen Batch kann das Skript dann wie folgend aufgerufen werden:

START /W \\server\netlogon\KiX32.exe \\server\netlogon\Drucker.kix

Schreibt ruhig wenn es Euch gefällt.

Gruß,

MisterIX

Hier das Skript (in Textdatei einfügen, anpassen und in Drucker.kix umbenennen):

01.
;************************************************************Schnipp*************************************************************** 
02.
 
03.
$Version =1 
04.
 
05.
SetConsole("Hide") 
06.
 
07.
 
08.
;******************************************************************************************************* 
09.
;*In diesen Arrays sind für jeden Druckerbereich die aktuellen Drucker eingtragen. (Druckergruppen)    * 
10.
;*Neue Drucker oder Namensänderungen können mit Ihrem FREIGABENAMEN eingetragen werden.                * 
11.
;*Der Stern zeigt an, dass dannach der INSTALLATIONSNAME des Standarddruckers kommt                    *          
12.
;******************************************************************************************************* 
13.
 
14.
$Buchhaltungsdrucker = "Versand_KYO_FS3900N_PCL", "*", "Versand_SWLaser" 
15.
 
16.
 
17.
 
18.
$Einkaufsdrucker = "QM_OKI5750_PCL6", "Einkauf_CAN_IR1022IF_PCL6","Einkauf_HP_BIJ2230_PCL5", "*", "Einkauf_Laserfax" 
19.
 
20.
 
21.
 
22.
;************************************************************************************ 
23.
;hier bitte den Printserver eintragen von dem die Drucker installiert werden sollen!* 
24.
;************************************************************************************ 
25.
 
26.
 
27.
$Printserver= "\\Printserver1" 
28.
 
29.
;************************************************************************************ 
30.
 
31.
 
32.
  
33.
$Druckinstall=0 
34.
 
35.
;*********************************** Registry auslesen ****************************************************************** 
36.
 
37.
$Aktuell = ReadValue("HKEY_CURRENT_USER\Printers\Druckerinstallation", "Version") 
38.
 
39.
;*********************************** aktuelle Druckgruppe ermitteln****************************************************** 
40.
 
41.
$PrintGroup = PrinterGroupID 
42.
 
43.
if $PrintGroup=""  
44.
 
45.
 sleep 10  
46.
 $PrintGroup = PrinterGroupID  
47.
 
48.
endif ;***********Manchmal geht die Anmeldung zu schnell********** 
49.
 
50.
 
51.
 
52.
;******************Achtung : hier den Domänennamen angeben!************************************************************** 
53.
 
54.
IF ComputerInGroup (noprint, Domäne) goto ende endif ; **** Computer ist Teil der Gruppe noprint und wurde von Druckerverteilung ausgeschlossen ***  
55.
 
56.
 
57.
;************************************ Erstinstallation ****************************************************************** 
58.
 
59.
 
60.
 
61.
IF $Aktuell=0  
62.
   
63.
  WriteValue("HKEY_CURRENT_USER\Printers\Druckerinstallation","Version", $Version,  "REG_MULTI_SZ") 
64.
  WriteValue("HKEY_CURRENT_USER\Printers\Druckerinstallation","Gruppe", $PrintGroup,  "REG_MULTI_SZ") 
65.
 
66.
endif 
67.
 
68.
;*********************************** Registry auslesen ****************************************************************** 
69.
 
70.
 
71.
$PrintGroupR= ReadValue("HKEY_CURRENT_USER\Printers\Druckerinstallation", "Gruppe") 
72.
 
73.
IF $Version<>$Aktuell or $Printgroup<>$PrintgroupR 
74.
 
75.
messagebox("Die Druckerinstallation muss upgedated werden ! Version: "+$Aktuell+ " nach Version: "+$Version+" Druckgruppe: "+$PrintGroupR+" nach Druckgruppe: "+$Printgroup, "Drucker updaten !",016,0) 
76.
 
77.
 
78.
WriteValue("HKEY_CURRENT_USER\Printers\Druckerinstallation","Version", $Version,  "REG_MULTI_SZ") 
79.
WriteValue("HKEY_CURRENT_USER\Printers\Druckerinstallation","Gruppe", $Printgroup,  "REG_MULTI_SZ") 
80.
   
81.
 
82.
;************************************************************************************** 
83.
;hier bitte den Printserver eintragen von dem die Drucker deinstalliert werden sollen!* 
84.
;************************************************************************************** 
85.
 
86.
DeleteAllPrinters(AlterPrintserver)   
87.
 
88.
;********************Hier nochmals den neuen Printserver eintragen!******************** 
89.
 
90.
 
91.
DeleteAllPrinters(Printserver)  
92.
 
93.
? "Computername:" +@wksta 
94.
 
95.
;*********************************************Druckerverbinden (Druckgruppe (im ADS), Druckergruppe)****************** 
96.
 
97.
 
98.
Druckerverbinden(DruckBuchhaltung, $Buchhaltungsdrucker,$Printserver) 
99.
 
100.
 
101.
Druckerverbinden(DruckEinkauf, $Einkaufsdrucker,$Printserver) 
102.
 
103.
 
104.
;********************************************************************************************************************************************* 
105.
 
106.
If $Druckinstall=0 
107.
 
108.
  messagebox("Der Rechner ist nicht Mitglied einer Druckgruppe !", "Drucker nicht installiert...",016,0) 
109.
 
110.
else 
111.
 
112.
  messagebox("Ihre Drucker wurden neu verbunden mit dem Printserver: "+$Printserver, "Drucker wurden installiert. MfG, MisterIX 2009",064,0) 
113.
 
114.
Endif 
115.
 
116.
 
117.
Else 
118.
 
119.
 
120.
;messagebox("Die Druckerinstallation muss nicht upgedated werden ! Version: "+$Aktuell, "Drucker aktuell !",064,0) 
121.
 
122.
Endif 
123.
 
124.
:ende 
125.
Exit 
126.
 
127.
;**********************************************************Hier kommen die Funktionen !*********************************************************** 
128.
 
129.
 
130.
Function ComputerInGroup($group,optional $Domain)  
131.
 
132.
  Dim $oGrp  
133.
 
134.
  if not $domain           
135.
    $domain=@domain          
136.
  endif  
137.
   
138.
  $oGrp = GetObject("WinNT://" + $domain + "/"  + $group + ",group" )  
139.
  if @error        
140.
   exit 1           
141.
  endif  
142.
 
143.
  if $oGrp.IsMember("WinNT://" + $domain + "/"  + @wksta + "$$" )  		         $ComputerInGroup=1  
144.
   else 			 
145.
     $ComputerInGroup=0  
146.
   endif  
147.
 
148.
endfunction  
149.
 
150.
Function DeleteAllPrinters($server) 
151.
? "Funktion aufgerufen mit:"+$server 
152.
sleep 1 
153.
 
154.
$Index = 0 
155.
$TempPrinter = "" 
156.
 
157.
;Erstellt eine Liste mit allen installierten Druckern 
158.
 
159.
Dim $PrinterArray[40] 
160.
:Loop 
161.
If @ERROR=0 
162.
$TempPrinter = $TempPrinter + EnumValue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$Index) + "," 
163.
$Index = $Index + 1 
164.
GoTo "Loop" 
165.
EndIf 
166.
 
167.
$TempPrinter = Trim($TempPrinter) 
168.
$Length = Len("$TempPrinter") - 2 
169.
$TempPrinter = Left("$TempPrinter","$Length") 
170.
$PrinterArray = Split("$TempPrinter",",") 
171.
 
172.
 
173.
;trennt alle Netzwerkdrucker 
174.
 
175.
For $Count = 0 to $Index-2 
176.
$Temp=$PrinterArray[$Count] 
177.
? $Temp+", "+$server 
178.
IF INSTR("$Temp","$server")<>0 
179.
$rc=DelPrinterConnection ($PrinterArray[$Count]) 
180.
Endif 
181.
Next 
182.
 
183.
 
184.
Endfunction 
185.
*********************************************************Achtung! Hier die im ADS angelegten Druckgruppen eintragen!******************** 
186.
Function PrinterGroupID 
187.
 
188.
$ID=0 
189.
 
190.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+1 Endif 
191.
 
192.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+2 Endif 
193.
 
194.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+4 Endif 
195.
 
196.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+8 Endif 
197.
 
198.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+16 Endif 
199.
 
200.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+32 Endif 
201.
 
202.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+64 Endif 
203.
 
204.
IF ComputerInGroup(DruckEinkauf,Domaene) $ID=$ID+128 Endif 
205.
 
206.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+256 Endif 
207.
 
208.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+512 Endif 
209.
 
210.
IF ComputerInGroup(DruckBuchhaltung,Domaene) $ID=$ID+1024 Endif 
211.
 
212.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+2048 Endif 
213.
 
214.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+4096 Endif 
215.
 
216.
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+8192 Endif 
217.
 
218.
IF ComputerInGroup(noprint,Domaene) $ID=$ID+16384 Endif ;************** die Gruppe noprint wird im ADS angelegt und dient zum ausschliessen von Rechnern aus der Druckerverteilung (ZB. Server) 
219.
 
220.
;? "Dezimale ID: "+$ID 
221.
 
222.
$PrinterGroupID=$ID 
223.
 
224.
Endfunction 
225.
 
226.
 
227.
Function Druckerverbinden($Druckgruppe, $Druckergruppe, $Print) 
228.
 
229.
$X=0 
230.
 
231.
;******************Achtung : hier nochmals den Domänennamen angeben!******************************************************* 
232.
 
233.
IF ComputerInGroup($Druckgruppe,Domaene) 
234.
 
235.
? "Computer ist Mitglied der Druckergruppe: "+$Druckgruppe+"   ! " 
236.
 
237.
Do 
238.
 
239.
If $Druckergruppe[$x]<>"*" 
240.
 
241.
   ;? "Drucker "+ $Print+"\"+$Druckergruppe[$x]+" wird instaliert !! " 
242.
   
243.
   ADDPrinterConnection($Print+"\"+$Druckergruppe[$x]) 
244.
   
245.
   $x=$x+1 
246.
  
247.
Endif 
248.
 
249.
Until $Druckergruppe[$x]="*" 
250.
 
251.
$Druckinstall=1 
252.
 
253.
;? "Standard: "+$Print+"\"+$Druckergruppe[$x+1] 
254.
 
255.
SetDefaultPrinter($Print+"\"+$Druckergruppe[$x+1]) 
256.
 
257.
 
258.
Endif 
259.
 
260.
Endfunction 
261.
 
262.
;***************************************************************Schnapp******************************************** 
263.
 

Mitglied: dog
dog schreibt am 05.02.2009 um 14:54:56 Uhr
BITTE schau dir mal die Formatierungshilfe an: http://www.administrator.de/helpsystem/de ...
Mitglied: MisterIX
MisterIX schreibt am 05.02.2009 um 15:47:14 Uhr
Gut das mit der Quellcodeformatierung. Danke für den Hinweis.
Mitglied: MisterIX
MisterIX schreibt am 05.02.2009 um 15:48:03 Uhr
Übrigens solltest Du die Uhr an Deinem Rechner mal stellen... ;)
Mitglied: MisterIX
MisterIX schreibt am 06.02.2009 um 11:53:21 Uhr
Achtung habe in Zeile 43 noch eine kleine Änderung vorgenommen:

Es muss heissen if $PrintGroup="" anstatt if $PrintGroup="0" ansonsten funktioniert die Wartepause nicht, die eingehalten werden soll, wenn keine Druckgruppe vom DC ermittelt werden kann.
mehr ...Ähnliche Beiträge