Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

Skript zur automatischen Verteilung von Druckern anhand von Computerkonten in Active Directory Gruppen

Frage Microsoft Windows Netzwerk

Mitglied: MisterIX

MisterIX (Level 1) - Jetzt verbinden

05.02.2009, aktualisiert 21.04.2009, 5578 Aufrufe, 4 Kommentare

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. Mit freundlichen Grüßen, 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
05.02.2009 um 14:54 Uhr
BITTE schau dir mal die Formatierungshilfe an: http://www.administrator.de/helpsystem/detail.php?idx=20#toc27
Bitte warten ..
Mitglied: MisterIX
05.02.2009 um 15:47 Uhr
Gut das mit der Quellcodeformatierung. Danke für den Hinweis.
Bitte warten ..
Mitglied: MisterIX
05.02.2009 um 15:48 Uhr
Übrigens solltest Du die Uhr an Deinem Rechner mal stellen... ;)
Bitte warten ..
Mitglied: MisterIX
06.02.2009 um 11:53 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.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Windows Server
gelöst Active Directory CA öffentlich vertrauenswürdig machen, geht das? (2)

Frage von DeathangelCH zum Thema Windows Server ...

Windows Server
gelöst Active Directory File Extension - Associated Program (11)

Frage von adm2015 zum Thema Windows Server ...

Windows 8
gelöst Active Directory Default User.v2 Profile - Windows 8.1 Apps Error (4)

Frage von adm2015 zum Thema Windows 8 ...

Windows Server
Active Directory sinnvoll für kleine Firma (15)

Frage von WolfPeano zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...