ralfkausk
Goto Top

Powershell - Werte in Variable durch Schleife erweitern bzw. ändern

Hallo zusammen

Ich habe mir ein Skript gebaut mit dem ich unser AD Abfrage und mir anhand eines Benutzernamens die Vorgesetztenstruktur ausgeben lasse (bis zur 9. Ebene).
Das ganze funktioniert aktuell aber mit einer Zwischenausgabe in eine Textdatei, welche ich mir gerne sparen würde.
Beispiel:
Ich gebe den Benutzernamen ein, das Skript guckt wer an diese Person berichtet und schreibt diese Benutzernamen in eine Datei.
Im nächsten Schritt lese ich die Datei ein und ermittle wer an diese Personen berichtet, usw.

Ich finde das ganze etwas lästig und würde das gerne umstellen, so dass jede Ebene nur in eine Variable geschrieben wird.

Mit dem Code ermittle ich die IDs
### Level 0
$searcher=New-Object DirectoryServices.DirectorySearcher
$searcher.Filter="(&(samaccountname=$SEARCHCDSID))"  
$results=$searcher.findall()
$ID0 = $results.Properties.directreports
    foreach ($ID00 in $ID0){DOMSEARCH $ID00 >> ".\$LEVEL0"}  

In der Datei stehen dann alle IDs untereinander und können somit in der nächsten "foreach" Schleife weiterverarbeitet werden.

Das habe ich umgestellt auf:
(Zeile 6 hat sich geändert!)
### Level 0
$searcher=New-Object DirectoryServices.DirectorySearcher
$searcher.Filter="(&(samaccountname=$SEARCHCDSID))"  
$results=$searcher.findall()
$ID0 = $results.Properties.directreports
    foreach ($ID00 in $ID0){$L0 += DOMSEARCH $ID00`n }

Leider bekomme ich die Daten nicht wie erhofft sondern aneinandergekettet, und zwar ohne Punkt und Komma!
(ID1ID2ID3ID4ID5)

Die Funktion dazu sieht folgendermaßen aus:
function DOMSEARCH ($ARG) {
    $searcher=New-Object DirectoryServices.DirectorySearcher
    $searcher.Filter="(&(distinguishedname=$ARG))"  
    $results=$searcher.findall()
    $ID0 = $results.Properties.samaccountname
    #$REPTO = $results.Properties.fordmanagercdsid
    #$DIV = $results.Properties.forddivabbr
    #$MAIL = $results.Properties.mail
    #$OTHERMAIL = $results.Properties.fordotheremail
    #$COMPANY = $results.Properties.company
    #echo "$ID0,$REPTO,$DIV,$MAIL,$OTHERMAIL,$COMPANY" 
    $ID0
}

Kann mir jemand einen Tipp geben wie ich den Code umstellen muss damit es wie gewünscht funktioniert?

Gruß
\Ralf

Content-ID: 324631

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

Ausgedruckt am: 22.11.2024 um 18:11 Uhr

131381
Lösung 131381 23.12.2016 aktualisiert um 09:05:55 Uhr
Goto Top
Moin,
damit das hinzufügen von Werten zu einem Array funktioniert musst du natürlich erst mal ein leeres Artay erzeugen sonst denkt die Powershell es soll Strings verketten, also erstelle erst mal das leere Array
$L0 = @()
dann kannst du in deiner Schleife den Wert hinzufügen, einen Zeilenumbruch brauchst du dann nicht hinzufügen
$L0 += DOMSEARCH "$ID00"  
Gruß
H41mSh1C0R
Lösung H41mSh1C0R 23.12.2016 um 09:05:36 Uhr
Goto Top
Hallo Ralf,

wenn du uns noch sagen kannst WIE der Inhalt der Variable aussehen soll dann kann man sicher auch weiterhelfen.

VG
ralfkausk
ralfkausk 23.12.2016 um 09:09:32 Uhr
Goto Top
Hat sich erledigt

Bei meiner Internetsuche habe ich dann jetzt doch eine Lösung gefunden.

### Level 0
$L0 = @()
$searcher=New-Object DirectoryServices.DirectorySearcher
$searcher.Filter="(&(samaccountname=$SEARCHCDSID))"  
$results=$searcher.findall()
$ID0 = $results.Properties.directreports
    foreach ($ID00 in $ID0){
        $TMP = DOMSEARCH $ID00
        $L0 += $TMP
        }
ralfkausk
ralfkausk 23.12.2016 um 09:10:16 Uhr
Goto Top
Danke an alle Helfer ;)
H41mSh1C0R
H41mSh1C0R 23.12.2016 um 09:10:57 Uhr
Goto Top
Die genau das macht was Mikrotik geschrieben hat. =)