none
PowerShell ActiveDirectory OUs abfragen und auswerten. RRS feed

  • Frage

  • Hallo MSDN-Community,

    Ich hoffe ich bin hier im richtigen Forum gelandet, vielleicht kann mir jemand helfen.

    Zuerst möchte ich sagen ich würde mich noch zu den Anfängern mit Powershell zählen, hatte zwar schon eine Schulung dafür aber es hakt eben doch noch öfter an (ich denke mal) recht simplen Fehlern, vorallem was Filterungen betrifft.

    Da ich intern leider keinen Ansprechpartner habe der mir bei PowerShell mal helfen kann oder einen Tipp geben kann, richte ich mich an euch.

    Hier mein Problem.: 

    Ich möchte aus 2 OU's die untergeordneten OU's auslesen, stellt prinzipiell erstmal kein Problem da, doch das ganze soll möglichst automatisch funktionieren, die ausgelesenen Informationen sollen dann weiterverarbeitet werden.


    Hintergrundinfo.: 

    Am Ende möchte ich quasi die ausgelesenen OU's in einem DropDownfeld auflisten lassen, um eine Auswahl der OU's bereitstellen zu können.

    (Ich nutze XAML für die Entwicklung der GUI, in VisualStudio)

    Meine Frage(n).: 

    Habe ich den falschen Ansatz oder einfach nur ein Fehler in der Filterung? (Code Unten)

    Könnte mir jemand einen Tipp geben oder eventuell sogar einen besseren Lösungsansatz anbieten?

    Freue mich über jede Hilfe.

    Grüße Nova

    Script.: 

    $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like 'TestOU*'" -Property * |
        Select-Object -Property DistinguishedName
    
        $LocationOUs | ForEach-Object {
            $Location  = @{
                OUName = $_.DistinguishedName
            }
            New-Object -TypeName PSObject -Property $Location
        }
    
            foreach ($Locations in $Location.OUName) {
                $_.Location
            }
    
    
    Get-ADOrganizationalUnit -Filter "name -like'Standort1''Standort2'" -SearchBase  $Location.OUName

    Meine Ausgabe bringt leider immer nur die beiden OU's dessen untergeordnete OU's ich eigentlich haben möchte..

    Ausgabe.: 

    OUName                             
    ------                             
    OU=OU1,DC=Test,DC=local
    OU=OU2,DC=Test,DC=local



    Donnerstag, 12. Januar 2017 10:01

Antworten

  • > Oder hab ich deine Antwort ggf. falsch verstanden?
     
    Ja :-)))
     
    > $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like 'goehler*'" -Property *
     
    Soweit ok, damit findest Du alle OUs, die mit goehler anfangen. Von denen willst Du jetzt die Childs:
     
    $LocationOUs | % { $Childs += Get-ADOrganizationalUnit -filter "name -like '*'" -Searchbase $_ -SearchScope OneLevel }
     
     
    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:07
    Freitag, 13. Januar 2017 12:49
  • Hey NovaCode97,

    bitte bau mal eine Searchscope ein.

    -SearchScope
           The scope of an AD search.
           Possible values for this parameter are:
           Base or 0        Search only the current path or object.
           OneLevel or 1    Search the immediate children
           Subtree or 2     Search the current path/object and all children

    Gruß

    Carsten


    http://www.ms-fabric.de/ Wenn Dir eine Forenantwort weiter geholfen hat dann markiere sie doch bitte als Antwort, dies hilft anderen bei der Lösung von Problemen! LG Carsten

    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:38
    Freitag, 13. Januar 2017 10:03
  • Du mußt eine zweite Suche machen, der Du den DN der beiden OUs als Searchbase übergibst. Hier kommt dann der SearchScope OneLevel ins Spiel und ObjectClass OrganizationalUnit. Oder so ähnlich :-)
     
    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:08
    Freitag, 13. Januar 2017 11:04
  • Hey Carsten,

    danke für deine Antwort

    habe den Code wie folgt geändert.: 

    $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like 'goehler*'" -Property * -SearchScope OneLevel  |
        Select-Object -Property DistinguishedName
    
        $LocationOUs | ForEach-Object {
            $Location  = @{
                OUName = $_.DistinguishedName
            }
            New-Object -TypeName PSObject -Property $Location
        }
    
            foreach ($Locations in $Location.OUName) {
                $_.Location
            }
    
    
    Get-ADOrganizationalUnit -Filter "name -like'Halle''Hoesbach'" -SearchBase $Location.OUName -SearchScope Onelevel
    

    Bekomme leider nach wie vor die gleiche Ausgabe.

    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:38
    Freitag, 13. Januar 2017 12:22
  • Sauber ich danke für die Hilfe, datt läuft ! :)

    Anbei noch der Code und bis zum nächsten mal.

    $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like 'goehler*'" -Property * -SearchScope OneLevel |
        Select-Object -Property DistinguishedName
    
        $LocationOUs | ForEach-Object {
            $Location  = @{
                OUName = $_.DistinguishedName
            }
            New-Object -TypeName PSObject -Property $Location
        }
            
            foreach ($Locations in $Location.OUName) {
                $_.OUName
            }
    
    
    $Location.OUName | 
        ForEach-Object { 
            $Locations += Get-ADOrganizationalUnit -Filter "name -like '*'" -Searchbase $_ -SearchScope OneLevel 
        }
    
    $Locations

    Grüße an alle beteiligten, und nochmal ein Dankeschön!

    Nova

    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:07
    Freitag, 13. Januar 2017 13:07
  • Hallo nochmal an alle interessierten,

    habe noch einen Optionalen oder eher optimierten? / abgekürzten Weg ohne ein Object geschrieben.

    anbei Code 

    Function Get-OUs {
        param(
        $SearchOU = 'suchwort*'
        )
    
        $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like '$SearchOU'" -Property * -SearchScope OneLevel |
            Select-Object -Property DistinguishedName |
                foreach {
                    Get-ADOrganizationalUnit -Filter "name -like '*'" -SearchBase $_.DistinguishedName  -SearchScope OneLevel |
                        Select-Object -Property DistinguishedName 
                }
     
     $LocationOUs
    }
    Get-Ous

    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:59
    Freitag, 13. Januar 2017 13:58

Alle Antworten

  • Hallo NovaCode97,

    Da Deine Frage PowerShell-Befehle behandelt, habe ich den Thread zur besseren Unterstützung verschoben. Wenn Du weitere Fragen bezüglich der Entwicklung der GUI hast, kannst Du Threads im XAML- oder Visual Studio-Forum erstellen.

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 13. Januar 2017 09:58
  • Hey NovaCode97,

    bitte bau mal eine Searchscope ein.

    -SearchScope
           The scope of an AD search.
           Possible values for this parameter are:
           Base or 0        Search only the current path or object.
           OneLevel or 1    Search the immediate children
           Subtree or 2     Search the current path/object and all children

    Gruß

    Carsten


    http://www.ms-fabric.de/ Wenn Dir eine Forenantwort weiter geholfen hat dann markiere sie doch bitte als Antwort, dies hilft anderen bei der Lösung von Problemen! LG Carsten

    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:38
    Freitag, 13. Januar 2017 10:03
  • Du mußt eine zweite Suche machen, der Du den DN der beiden OUs als Searchbase übergibst. Hier kommt dann der SearchScope OneLevel ins Spiel und ObjectClass OrganizationalUnit. Oder so ähnlich :-)
     
    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:08
    Freitag, 13. Januar 2017 11:04
  • Hi Martin,

    Danke für deine Antwort !

    ich habe doch eine 2. Suchabfrage in dem ich mein LocationObject nochmal einlese und die DN übergebe.

    habe nun noch dem Befehl den Searchscope übergeben, allerdings bleibt die Ausgabe gleich :)

    Oder hab ich deine Antwort ggf. falsch verstanden?

    Falls du noch einen Vorschlag hast, bzw. du mir den aktuellen noch mal etwas detailreicher erklären kannst würde ich mich freuen.

    Grüße Nova (Chris)

    $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like 'goehler*'" -Property * -SearchScope OneLevel  |
        Select-Object -Property DistinguishedName
    
        $LocationOUs | ForEach-Object {
            $Location  = @{
                OUName = $_.DistinguishedName
            }
            New-Object -TypeName PSObject -Property $Location
        }
    
            foreach ($Locations in $Location.OUName) {
                $_.Location
            }
    
    
    Get-ADOrganizationalUnit -Filter "name -like'Halle''Hoesbach'" -SearchBase $Location.OUName -SearchScope Onelevel
    



    • Bearbeitet NovaCode97 Freitag, 13. Januar 2017 12:19 Code vergessen :)
    Freitag, 13. Januar 2017 12:14
  • Hey Carsten,

    danke für deine Antwort

    habe den Code wie folgt geändert.: 

    $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like 'goehler*'" -Property * -SearchScope OneLevel  |
        Select-Object -Property DistinguishedName
    
        $LocationOUs | ForEach-Object {
            $Location  = @{
                OUName = $_.DistinguishedName
            }
            New-Object -TypeName PSObject -Property $Location
        }
    
            foreach ($Locations in $Location.OUName) {
                $_.Location
            }
    
    
    Get-ADOrganizationalUnit -Filter "name -like'Halle''Hoesbach'" -SearchBase $Location.OUName -SearchScope Onelevel
    

    Bekomme leider nach wie vor die gleiche Ausgabe.

    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:38
    Freitag, 13. Januar 2017 12:22
  • > Oder hab ich deine Antwort ggf. falsch verstanden?
     
    Ja :-)))
     
    > $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like 'goehler*'" -Property *
     
    Soweit ok, damit findest Du alle OUs, die mit goehler anfangen. Von denen willst Du jetzt die Childs:
     
    $LocationOUs | % { $Childs += Get-ADOrganizationalUnit -filter "name -like '*'" -Searchbase $_ -SearchScope OneLevel }
     
     
    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:07
    Freitag, 13. Januar 2017 12:49
  • Sauber ich danke für die Hilfe, datt läuft ! :)

    Anbei noch der Code und bis zum nächsten mal.

    $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like 'goehler*'" -Property * -SearchScope OneLevel |
        Select-Object -Property DistinguishedName
    
        $LocationOUs | ForEach-Object {
            $Location  = @{
                OUName = $_.DistinguishedName
            }
            New-Object -TypeName PSObject -Property $Location
        }
            
            foreach ($Locations in $Location.OUName) {
                $_.OUName
            }
    
    
    $Location.OUName | 
        ForEach-Object { 
            $Locations += Get-ADOrganizationalUnit -Filter "name -like '*'" -Searchbase $_ -SearchScope OneLevel 
        }
    
    $Locations

    Grüße an alle beteiligten, und nochmal ein Dankeschön!

    Nova

    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:07
    Freitag, 13. Januar 2017 13:07
  • Super, wenn du nun noch die hilfreichen Posts makierst und so, dann sieht man was geholfen hat....

    Gruß
    Carsten


    http://www.ms-fabric.de/ Wenn Dir eine Forenantwort weiter geholfen hat dann markiere sie doch bitte als Antwort, dies hilft anderen bei der Lösung von Problemen! LG Carsten

    Freitag, 13. Januar 2017 13:27
  • Hallo nochmal an alle interessierten,

    habe noch einen Optionalen oder eher optimierten? / abgekürzten Weg ohne ein Object geschrieben.

    anbei Code 

    Function Get-OUs {
        param(
        $SearchOU = 'suchwort*'
        )
    
        $LocationOUs = Get-ADOrganizationalUnit -Filter "name -like '$SearchOU'" -Property * -SearchScope OneLevel |
            Select-Object -Property DistinguishedName |
                foreach {
                    Get-ADOrganizationalUnit -Filter "name -like '*'" -SearchBase $_.DistinguishedName  -SearchScope OneLevel |
                        Select-Object -Property DistinguishedName 
                }
     
     $LocationOUs
    }
    Get-Ous

    • Als Antwort markiert NovaCode97 Freitag, 13. Januar 2017 13:59
    Freitag, 13. Januar 2017 13:58