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:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 39930
Url: https://administrator.de/contentid/39930
Ausgedruckt am: 26.11.2024 um 15:11 Uhr
9 Kommentare
Neuester Kommentar
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
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
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
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