skid
Goto Top

Array auslesen und schreiben

Hi,

habe ein Problem mit einem Array.

Undzwar soll mein Skript das AD auslesen und Workstations die mit ABC anfangen in ein Array schreiben.
Nachdem das Array gefüllt worden ist soll es bei einem User im AD unter Log On To.. eingefügt werden.

Mein Skript sieht folgendermaßen aus:

 ...............

Const ADS_PROPERTY_APPEND = 3

Set objUser = GetObject(strOU)

Dim ArrWorkstations()
ReDim ArrWorkstations(0)
i = 0

Do Until objRecordSet.EOF

i = i + 1

'Computer und Datum in Variable  

strComputerName = objRecordSet.Fields("Name")  
strComputerName = Left(strComputerName, 3)
	

If strComputerName = "NGO" Then  
			
			
	Workstations = objRecordSet.Fields("Name")  
End If
		
		
if Ubound(ArrWorkstations) < i then ReDim preserve ArrWorkstations(i)

                ArrWorkstations(i) = Workstations

	objRecordSet.MoveNext
		
	
Loop


MsgBox Join(ArrWorkstations, vbNewLine )


objUser.PutEx ADS_PROPERTY_APPEND, "userWorkstations", Array (ArrWorkstations)  
				
           objUser.SetInfo			
						
objConnection.Close

Wenn ich mir mit der MsgBox das Array ausgeben lasse sind alle Workstations drin.

Aber ich schaffe es nicht diese Werte beim User einzutragen.
Es wird immer nur die letzte Workstation aus dem Array eingefügt.

Kann mir jemand sagen wo der Fehler ist ?!


Gruss

SKID

PS: irgendwie klappt das mit dem Formatieren nicht immer face-wink

Content-Key: 39930

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

Printed on: April 18, 2024 at 18:04 o'clock

Member: DaSam
DaSam Sep 12, 2006 at 21:08:23 (UTC)
Goto Top
Hi,

liegts vielleicht daran, dass man die Workstations KOMMASEPARIERT eintragen muss?

Guckst Du hier: http://www.microsoft.com/technet/scriptcenter/resources/qanda/feb06/hey ...

cu,
Alex
Member: Biber
Biber Sep 13, 2006 at 07:13:46 (UTC)
Goto Top
...oder, anders ausgedrückt:

...
objUser.PutEx ADS_PROPERTY_APPEND, "userWorkstations", Join( Array (ArrWorkstations),",")  
...

Gruß
Biber
Member: skid
skid Sep 13, 2006 at 07:36:50 (UTC)
Goto Top
Hi,

der Tip war schon nicht schlecht aber jetzt bekomme ich die Fehlermeldung:

Laufzeitfehler in Microsoft VBScript: Typen unverträglich

Da vielleicht ne idee ?

SKID
Member: Biber
Biber Sep 13, 2006 at 07:43:11 (UTC)
Goto Top
..sorry, war doppelt gemoppelt:
objUser.PutEx ADS_PROPERTY_APPEND, "userWorkstations", Join( ArrWorkstations,",")  

immer noch ungetestet, aber Erfolg versprechender...

Gruß
Biber
Member: skid
skid Sep 13, 2006 at 11:24:02 (UTC)
Goto Top
Tja, und schon die nächste Fehlermeldung:

Active Directory: Unbekannter Fehler

Wenn ich das ganze in dieser Form direkt mitgebe, so als Test, dann geht´s:

objUser.PutEx ADS_PROPERTY_APPEND,"userWorkstations", Array ("WKS1,WKS2")  
objUser.SetInfo

Müsste man evtl. das ArrWorkstations auch in Hochkommas setzen ?

Gruss
SKID
Member: DaSam
DaSam Sep 13, 2006 at 13:48:18 (UTC)
Goto Top
Hola,

so könnte es gehen:

objUser.PutEx ADS_PROPERTY_APPEND, "userWorkstations", Array(Join( ArrWorkstations,","))  
Member: skid
skid Sep 13, 2006 at 14:03:18 (UTC)
Goto Top
SUPER

So klappt es jetzt!

Danke an alle Beteiligten - ich war schon am verzweifeln face-wink

Gruss
SKID
Member: Biber
Biber Sep 13, 2006 at 15:52:48 (UTC)
Goto Top
Nachtrag: @skid
Ich musste ein bisschen länger draufgucken, aber jetzt verstehe ich es auch.

Der Klemmer ist, dass Du ja das ADS_PROPERTY_APPEND verwendest.
Und zusätzliche Einträge in ein Attribut einträgst, dass auch mehrere aufnehmen kann.

Heißt
a) Du MUSST in diesem Fall ein Array übergeben, auch wenn es nur ein Element gäbe...
[Beispiel: objUser.PutEx ADS_PROPERTY_APPEND "userWorkstations", Array("MeinEinzigerRechner") ]
b) Wenn das so ist, ist Deine Programmmimik oben zu umständlich;
dann könntest Du auch gleich jedesmal den frisch gefundenen Eintrag beim Lesen des aktuellen Satzes/Feldes "Name" anfügen:
[ [Beispiel: objUser.PutEx ADS_PROPERTY_APPEND "userWorkstations", Array(objRecordSet.Fields("Name")) ]

OHNE die Zwischenspeicherung in "Workstations" und "ArrWorkStations" und das ständige "ReDim Preserve".

c) Ist aber alles gar nicht, was Du willst... Du fügst ja immer neue "workstations" an... die bereits vorhandenen bleiben erhalten in der ADS.objUser.userWorkStations-Property.

Führt mich zu Punkt d)....
d) Mein Gedanke mit dem Als-String-Übergeben vorhin war nicht so daneben, aber das Flag ADS_PROPERTY_APPEND muss raus:
d1) objUser.PutEx "userWorkstations", Join( ArrWorkstations,",")
-oder-
d2) objUser.PutEx ADS_PROPERTY_UPDATE, "userWorkstations", Array(Join( ArrWorkstations,",") )
Wenn die gefundenen Workstations tatsächlich die einzigen sind.

Gruß
Biber
Member: skid
skid Sep 14, 2006 at 07:15:01 (UTC)
Goto Top
Hi Biber,

zuerst hatte ich auch vor direkt beim lesen des ersten Datensatzes den Wert reinzuschreiben.
Habe es Probiert mit:

objUser.PutEx ADS_PROPERTY_APPEND, "userWorkstations", Array (Workstations)

aber so hat er mir immer den letzten Datensatz reingeschrieben - heißt, alle davor wurden überschrieben.

objUser.PutEx ADS_PROPERTY_APPEND, "userWorkstations", Array(objRecordSet.Fields("Name"))

--> führt zu einem Fehler: Active Directory: Mindestens ein Eingabeparameter ist ungültig

Habe dann gelesen das dieses Feld Log On To zwar ein Feld ist wo man mehrere Einträge machen kann aber die Werte in einem reingeschrieben werden müssen.
http://www.wisesoft.co.uk/Articles/Scripting/ActiveDirectoryProgramming ...

Da es aber nicht nur eine Workstation gibt die mit NGO anfangen ist das so schon OK.

Gruss
SKID