Frage ist gelöstSkript zur automatischen Verteilung von Druckern anhand von Computerkonten in Active Directory Gruppen
05.02.2009
14:25:56 Uhr3123 Aufrufe
4 Antworten
14:25:56 Uhr
4 Antworten
Noch nicht bewertet
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.
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):
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.
dog schreibt am 05.02.2009 um 14:54:56 Uhr
BITTE schau dir mal die Formatierungshilfe an: http://www.administrator.de/helpsystem/de ...
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.
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.






