basti007
Goto Top

LoginScript - Druckerzuweisen mit KIX und Gruppenobjekte in der AD?

Hallo Zusammen,

ich bin gerade etwas am Erfahrungen sammeln mit den AD von MS und probiere gerade ein paar Dinge mit dem LoginScript aus, was man ja bei der Anmeldung laufen lassen kann.

ich habe vor in Zukunft die Drucker für die einzelnen Maschienen direkt mit dem Login-Script zuweisen zu lasseb und habe diesbezüglich auch verschiedene Gruppenobjekte in der AD angelegt. Der Gruppenname ist wie folgt aufgebaut "printer" + Druckername -> z.B. printerD1228
Ich prüfe nun noch ab ob der Rechnername oder der User in dieser Printergruppe ist und weise den Drucker entsprechend zu. Das funktioniert soweit auch zuverlässig.

Hier mein KIX-Script:

If (@WKSTA OR @userid) INGROUP("printerD1228")
ADDPRINTERCONNECTION ("\\prints01\D1228")
? "Drucker D1228 wurde erfolgreich angeschlossen"
Endif


Ich will jetzt, dass er sich die Gruppennamen dynamisch aus einer vorgegebenen OU in der AD zieht und diese per Schleife durchläuft und die entsprechenden Drucker zuweist, so dass ich nicht bei einer neuen Druckerinstallation das Login-Script anpassen muss, sondern nur eine neue Gruppe in der AD. Ebenfalls würde dieses auch sehr unübersichtlich werden, wenn die Anzahl der Drucker zunehmen wird. Im Augenblick sind es bei mir 3 Drucker für knappe 25 Clients; tendenz natürlich steigend.

Kann mir jemand von euch weiterhelfen ?


Gruß
Basti

Content-Key: 87622

Url: https://administrator.de/contentid/87622

Printed on: April 24, 2024 at 06:04 o'clock

Member: superbachy
superbachy May 19, 2008 at 13:55:05 (UTC)
Goto Top
Hi Basti

ich denke mal du möchtest ein Script laufen lassen die alle Gruppen ausliest in deren der User Mitglied ist. dann ein Script für die Gruppe haben und dann laufen lassen .

ich hattemal ein solches Script welches in einer w2k umgebung säuber läuft, in einer w23 umgebung liest er zwar die Gruppen aus, startet mir aber nicht mehr die Unterscripte .
ich leg es dir mal hier rein , dann kannste mal schauen ob es bei dir läuft.

Du MUSST das Sript nennen wie die Gruppe heisst
beispiel. Uer ist member of 75_zentrale_Drucker, dann muss dein Script 75_zentrale_Drucker.kix heissen.

Viel Glück...

; anmeldescript
break on
cls

; ----Systemzeit synchronisieren -----------------
settime "*"

; ----anzeige des Informationsfesnters -----------
color b/w
box ( 0, 0,24,179,full)
select
case (@time < "11:00:00")
at ( 2,20) "Guten Morgen, " + @userid
case (@time < "18:00:00")
at ( 2,20) "Guten Tag, " + @userid
case 1
at ( 2,20) "Guten Abend, " + @userid
endselect
at ( 4,10) "Sie werden mit Ihren Laufwerken und Druckern verbunden."
at ( 5,10) "Ihre Anmeldung an " + @wksta + " erfolgt über den Domänen-"
at ( 6,10) "kontroller " + @lserver + " und ist in wenigen Sekunden beendet."
at ( 8,19) " Bitte Warten . . ."
sleep 5
color r/W
$TAG_ZEIT = @day+", "+@MDASNO+"." + @year + ", "+@TIME+" UHR"
at (22,40) $TAG_ZEIT
color b+/W
at(10,10) "Anmelde - Status:"
; ? "Calling pre-logon script of user in: " + @homedrive

call @homedrive + "prelogon.kix"
$os=@InWin

IF $os="2"
; sleep 5
gosub w9x
ENDIF

IF $os="1"
gosub XP
ENDIF

:ende
exit

:XP
DO
$GroupMS=ENUMGROUP($index)
$Index=$Index+1

? "Benutzer ist mitglied der Gruppe>" + $GroupMS + "<"
;check if the domain-name is part of the group-string. if yes. erase the preceeding domain-part and use the pure group-name for the script
if InStr($GroupMS,@DOMAIN + "\")>0
$GroupMS=SubStr($GroupMS,Len(@DOMAIN + "\")+1)
? "Suchname ist: >" + $GroupMS + "<"
call $GroupsMS
endif


call $GroupMS
if @16034<>0
Shell Chr(34) + $GroupMS + ".wsf" + Chr(34)
if @16034<>0
Shell Chr(34) + $GroupMS + ".cmd" + Chr(34)
if @16034<>0
Shell Chr(34) + $GroupMS + ".bat" + Chr(34)
endif
endif
endif
Until Len($GroupMS)=0
;Helper
function IsUserMemberOf($GroupMSName)
; check if the user is a member in
$i=0
$GroupIS=""
$Membership=""

DO
$GroupIS=ENUMGROUP($i)
$i=$i+1
$Membership=$Membership+$GroupIS
Until Len($GroupIS)=0

if instr($Membership,$GroupMSName)>0
$RETURN=1 ;return true
else
$RETURN=0 ;return false

Endfunction
sleep 5
call @homedrive + "postlogon.kix"



habe auch noch ein Pre und ein postlogon verwendet welches aus dem Homedrive des benutzers gezogen wird um spezielle Sripte laufen zu lassen.

Gruß
Bachy
Member: Basti007
Basti007 May 20, 2008 at 17:30:29 (UTC)
Goto Top
So ich hab mal ein bischen programmiert und habe folgende Lösung gefunden:

Der Ablauf des Scripts ist wie folgt:

Ich habe auf der AD zwei OUs angelegt. In der einen OU habe ich Usergruppen mit den Freigabenamen der Drucker (z.B. D001)angelegt. In der Beschreibung der einzelnen Gruppen steht der Name des Printservers (z.B. \\printserver\). In der anderen OU sind ebenfalls Usergruppen angelgt, allerdings mit dem Prefix "s_" davor. Diese Gruppe dient zum Zuweisen des Druckers als Standarddrucker.

Das Script liest jetzt alle Objekte aus der ersten OU aus und sucht in diesem Gruppenobjekt nach dem Namen der Arbeitsstation. Wenn die in der Gruppe gefunden wurde, wird der Drucker eingefügt. Wenn der Drucker dann auch noch in der "s_[Druckername]" Gruppe vorhanden ist, wird er zusätzlich noch zum Standarddrucker ausgewählt.
Dieser Vorgang wird nun für jedes Objekt in der ersten OU durchgeführt.

Die zugewiesenen Drucker werden entsprechend in der Konsole ausgegeben und die Konsole am Ende geschlossenen

Hinweis: Beim zuweisen mehrer Standarddrucker wird der Drucker als Stadarddrucekr zugewiesen der bei einer alphabtischen Sortierung ganz hinten steht!

Script funktioniert soweit spitze, allerdings nur mit Computerobjekten in der AD.


; (c) 2008 -  "Basti" :-)  
;
; Drucker Maschienenbezogen zuweisen über Gruppenobjekte in der AD
;
; 
;
BREAK ON
;
; // Funktion ComputerObjekte in Gruppen suchen
;
	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
;
; // Ende der Funktion
;

? "                      DRUCKER VERWALTUNG                      "  
? "================================================================="  
? "                                                              "  
? "  Drucker für @WKSTA werden eingerichtet:"  
? ""  
;
;  Druckerzuweisung & Abfrage des Standarddruckkers
;
$ADdrucker = GetObject( "LDAP-PFAD zur entsprechenden OU" )  

for Each $Obj in $ADdrucker

	$drucker =  (SUBSTR($Obj.name, 4))
	$printserver = $Obj.description

	;? "s_"+$drucker  

	if ComputerInGroup("$drucker")	  
		if ADDPRINTERCONNECTION ($printserver+$drucker) = 0
			? "  $drucker | @SError"  
			if ComputerInGroup("s_"+$drucker)  
				if SetDefaultPrinter ($printserver+$drucker) = 0
   				endif
			endif
			else
			? "  $drucker | @SError <@ERROR>"  
 	 	endif
		;? "  $drucker wurde erfolgreich angeschlossen"  
	endif
	
next
;
? "                                                              "  
? "================================================================="  
? "  Druckerzuweisung beendet                                     "  
;get $Taste


Kann mir jemand noch einen Tipp geben, wie ich das o.g. Script noch auf Userobjekte aus der AD trimmen kann ?
Sprich dass ich einem User auch einen bestimmten Drucker zuweisen kann, den er dann immer hat egal an welchem Computer er sich anmeldet.

Gruß
Member: knuckles
knuckles Nov 24, 2008 at 09:21:00 (UTC)
Goto Top
Hi,

weis jemand, wie Basti das mit den 2 OUs gemacht hat ?
Das Script funktioniert - aber leider wird der Standarddrucker nicht festgelegt ??

Danke für eure Tipps.
Gruß
knuckles