Skript zur automatischen Verteilung von Druckern anhand von Computerkonten in Active Directory Gruppen
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):
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):
;************************************************************Schnipp***************************************************************
$Version =1
SetConsole("Hide")
;*******************************************************************************************************
;*In diesen Arrays sind für jeden Druckerbereich die aktuellen Drucker eingtragen. (Druckergruppen) *
;*Neue Drucker oder Namensänderungen können mit Ihrem FREIGABENAMEN eingetragen werden. *
;*Der Stern zeigt an, dass dannach der INSTALLATIONSNAME des Standarddruckers kommt *
;*******************************************************************************************************
$Buchhaltungsdrucker = "Versand_KYO_FS3900N_PCL", "*", "Versand_SWLaser"
$Einkaufsdrucker = "QM_OKI5750_PCL6", "Einkauf_CAN_IR1022IF_PCL6","Einkauf_HP_BIJ2230_PCL5", "*", "Einkauf_Laserfax"
;************************************************************************************
;hier bitte den Printserver eintragen von dem die Drucker installiert werden sollen!*
;************************************************************************************
$Printserver= "\\Printserver1"
;************************************************************************************
$Druckinstall=0
;*********************************** Registry auslesen ******************************************************************
$Aktuell = ReadValue("HKEY_CURRENT_USER\Printers\Druckerinstallation", "Version")
;*********************************** aktuelle Druckgruppe ermitteln******************************************************
$PrintGroup = PrinterGroupID
if $PrintGroup=""
sleep 10
$PrintGroup = PrinterGroupID
endif ;***********Manchmal geht die Anmeldung zu schnell**********
;******************Achtung : hier den Domänennamen angeben!**************************************************************
IF ComputerInGroup (noprint, Domäne) goto ende endif ; **** Computer ist Teil der Gruppe noprint und wurde von Druckerverteilung ausgeschlossen ***
;************************************ Erstinstallation ******************************************************************
IF $Aktuell=0
WriteValue("HKEY_CURRENT_USER\Printers\Druckerinstallation","Version", $Version, "REG_MULTI_SZ")
WriteValue("HKEY_CURRENT_USER\Printers\Druckerinstallation","Gruppe", $PrintGroup, "REG_MULTI_SZ")
endif
;*********************************** Registry auslesen ******************************************************************
$PrintGroupR= ReadValue("HKEY_CURRENT_USER\Printers\Druckerinstallation", "Gruppe")
IF $Version<>$Aktuell or $Printgroup<>$PrintgroupR
messagebox("Die Druckerinstallation muss upgedated werden ! Version: "+$Aktuell+ " nach Version: "+$Version+" Druckgruppe: "+$PrintGroupR+" nach Druckgruppe: "+$Printgroup, "Drucker updaten !",016,0)
WriteValue("HKEY_CURRENT_USER\Printers\Druckerinstallation","Version", $Version, "REG_MULTI_SZ")
WriteValue("HKEY_CURRENT_USER\Printers\Druckerinstallation","Gruppe", $Printgroup, "REG_MULTI_SZ")
;**************************************************************************************
;hier bitte den Printserver eintragen von dem die Drucker deinstalliert werden sollen!*
;**************************************************************************************
DeleteAllPrinters(AlterPrintserver)
;********************Hier nochmals den neuen Printserver eintragen!********************
DeleteAllPrinters(Printserver)
? "Computername:" +@wksta
;*********************************************Druckerverbinden (Druckgruppe (im ADS), Druckergruppe)******************
Druckerverbinden(DruckBuchhaltung, $Buchhaltungsdrucker,$Printserver)
Druckerverbinden(DruckEinkauf, $Einkaufsdrucker,$Printserver)
;*********************************************************************************************************************************************
If $Druckinstall=0
messagebox("Der Rechner ist nicht Mitglied einer Druckgruppe !", "Drucker nicht installiert...",016,0)
else
messagebox("Ihre Drucker wurden neu verbunden mit dem Printserver: "+$Printserver, "Drucker wurden installiert. MfG, MisterIX 2009",064,0)
Endif
Else
;messagebox("Die Druckerinstallation muss nicht upgedated werden ! Version: "+$Aktuell, "Drucker aktuell !",064,0)
Endif
:ende
Exit
;**********************************************************Hier kommen die Funktionen !***********************************************************
Function ComputerInGroup($group,optional $Domain)
Dim $oGrp
if not $domain
$domain=@domain
endif
$oGrp = GetObject("WinNT://" + $domain + "/" + $group + ",group" )
if @error
exit 1
endif
if $oGrp.IsMember("WinNT://" + $domain + "/" + @wksta + "$$" ) $ComputerInGroup=1
else
$ComputerInGroup=0
endif
endfunction
Function DeleteAllPrinters($server)
? "Funktion aufgerufen mit:"+$server
sleep 1
$Index = 0
$TempPrinter = ""
;Erstellt eine Liste mit allen installierten Druckern
Dim $PrinterArray[40]
:Loop
If @ERROR=0
$TempPrinter = $TempPrinter + EnumValue("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\PrinterPorts",$Index) + ","
$Index = $Index + 1
GoTo "Loop"
EndIf
$TempPrinter = Trim($TempPrinter)
$Length = Len("$TempPrinter") - 2
$TempPrinter = Left("$TempPrinter","$Length")
$PrinterArray = Split("$TempPrinter",",")
;trennt alle Netzwerkdrucker
For $Count = 0 to $Index-2
$Temp=$PrinterArray[$Count]
? $Temp+", "+$server
IF INSTR("$Temp","$server")<>0
$rc=DelPrinterConnection ($PrinterArray[$Count])
Endif
Next
Endfunction
*********************************************************Achtung! Hier die im ADS angelegten Druckgruppen eintragen!********************
Function PrinterGroupID
$ID=0
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+1 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+2 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+4 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+8 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+16 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+32 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+64 Endif
IF ComputerInGroup(DruckEinkauf,Domaene) $ID=$ID+128 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+256 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+512 Endif
IF ComputerInGroup(DruckBuchhaltung,Domaene) $ID=$ID+1024 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+2048 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+4096 Endif
;IF ComputerInGroup(Druck****,Domaene) $ID=$ID+8192 Endif
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)
;? "Dezimale ID: "+$ID
$PrinterGroupID=$ID
Endfunction
Function Druckerverbinden($Druckgruppe, $Druckergruppe, $Print)
$X=0
;******************Achtung : hier nochmals den Domänennamen angeben!*******************************************************
IF ComputerInGroup($Druckgruppe,Domaene)
? "Computer ist Mitglied der Druckergruppe: "+$Druckgruppe+" ! "
Do
If $Druckergruppe[$x]<>"*"
;? "Drucker "+ $Print+"\"+$Druckergruppe[$x]+" wird instaliert !! "
ADDPrinterConnection($Print+"\"+$Druckergruppe[$x])
$x=$x+1
Endif
Until $Druckergruppe[$x]="*"
$Druckinstall=1
;? "Standard: "+$Print+"\"+$Druckergruppe[$x+1]
SetDefaultPrinter($Print+"\"+$Druckergruppe[$x+1])
Endif
Endfunction
;***************************************************************Schnapp********************************************
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 108171
Url: https://administrator.de/contentid/108171
Ausgedruckt am: 05.11.2024 um 15:11 Uhr
4 Kommentare
Neuester Kommentar