none
Dynamisch ou's durchlaufen RRS feed

  • Frage

  • Hallo, bin nu ganz neu im Thema PS. Wir haben eine  immer wieder auszuführende arbeit. Die sieht folgendermassen aus:Suche Mitglieder in einer OU und lege sie in eine Gruppe. Dieser kopier job funktioniert. Was mich stört ist das ich nicht dynamisch durch die OU's gehen kann und eventuelle enderungen nicht automatisch erstellt werden können, ich hab noch nichts gefunden was mir die Lampe anschaltet.

    Also ich hab $OU-start="OU=hamburg,OU=deutschland,CN=europa,CN=eu"

    Und ich hab die entsprechende $Gruppe="CN=admin,OU=hamburg,OU=deutschland,OU=gruppen,CN=europa,CN=eu"

    Diese variablen fütter ich jedesmal manuell.... (ungewünschter Spagetticode)

    Nu iss aber, wie die meisten AD's, auch unsere so aufgebaut

    europa

           deutschland

                   admin

                   verkauf

                   lager

           schweitz

                   admin

                   verkauf

                   lager

    usw. Ihr wisst wie ich's meine. Frage also wie gehe ich durch diese ou's??

    Dank im vorraus


    Mittwoch, 19. November 2014 20:04

Antworten

  • Hallo tagsmas!

    Es gibt mit der PowerShell verschieden Möglichkeiten das Active Directory zu verwalten, bitte sage uns welche Technik du verwendest damit wir dir gezielt helfen können.

    1. Nutzung der Directory Services .NET Klassen (Typen)
    2. Die Active Directory  Cmdlets der Firma DELL (ehemals Quest) aus dem ActiveRoles Management Snapin .
    3. Die Active Directory Cmdlets von Microsoft  aus dem Active Directory Modul
    4. Nutzung von WMI zur Verwaltung von Active Directory (nicht empfohlen und veraltet)

    Sieh meinen Blog Artikel hier: http://www.powershell-group.eu/powershell-active-directory/

    # Das Modul mit den Active Directory Cmdlets von Microsoft laden 
    Import-Module ActiveDirectory 
    
    # Alle OUs (-SearchScope Subtree) unterhalb der -SearchBase durchsuchen 
    Get-AdUser -SearchBase 'OU=hamburg,OU=deutschland,CN=europa,CN=eu' -SearchScope Subtree


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Donnerstag, 20. November 2014 07:59
  • Hallo

    Mit einer Schleife kannst du deine Domäne oder eine spezifische OU durchlaufen... In der Foreach Schleife kannst du also einfach deinen Code zum hinzufügen in die Gruppen integrieren und dann müsste das klappen..

        $ObjFilter = "(&(objectCategory=person)(objectCategory=User))"
        $objSearch = New-Object System.DirectoryServices.DirectorySearcher
        $objSearch.PageSize = 15000
        $objSearch.Filter = $ObjFilter  
        $objSearch.SearchRoot = "LDAP://dc=DOMAIN,dc=LOCAL"
        $AllObj = $objSearch.FindAll()
        
        foreach ($Obj in $AllObj)
               {
               
                $objItem = $Obj.Properties
                write-host $objItem.name
                
                }

    mfg

    pAscii

    Donnerstag, 20. November 2014 13:26
  • Hallo pAscii!

    1.)
    Warum erstellst du erst den Objektfilter in einer Variablen um diesen dann sofort zu benutzen ?
    Das macht keinen Sinn!

    2.)
    Eine Pagesize von 15000 macht keinen Sinn, da alle werte über 1000 wieder auf 1000 reduziert werden.
    Siehe hier: http://msdn.microsoft.com/de-DE/library/ms180880%28v=vs.80%29.aspx

    3.)

    Auch hier sollte man den Searchscope angeben!

    $objSearch = New-Object System.DirectoryServices.DirectorySearcher
    $objSearch.PageSize = 1000
    $objSearch.Filter = '(&(objectCategory=person)(objectCategory=User))' 
    $objSearch.SearchRoot = 'LDAP://OU=hamburg,OU=deutschland,CN=europa,CN=eu'
    $objSearch.SearchScope = 'Subtree'
        
    foreach ($Obj in $objSearch.FindAll()) {
               
      $objItem = $Obj.Properties
      write-host $objItem.name
                
    }
    Die hilfreiche Dokumentation zu der System.DirectoryServices.DirectorySearcher findest du hier:
    http://msdn.microsoft.com/de-de/library/system.directoryservices.directorysearcher%28v=vs.110%29.aspx


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Donnerstag, 20. November 2014 15:05
  • Hallo tagsmas,

    wenn ich dich richtig verstanden habe, willst du die User auf Basis der OU in der sie sich befinden Gruppen zuweisen oder? Wenn ja, hilft dir vielleicht dieses Skript weiter:

    Import-Module ActiveDirectory
    $ADUserList = Get-AdUser -SearchBase 'OU=SubOU,OU=HauptOU,DC=DeinDC,DC=loc' -Filter *
    foreach($ADUser in $ADUserList)
    {
    	$GroupName = $ADUser.DistinguishedName.Split(",")[2].Replace("OU=","")
    	if((Get-ADGroupMember $GroupName | WHERE {$_.SID -eq $ADUser.SID}) -eq $null)
    	{
    		Add-ADGroupMember -Identity $GroupName -Members $ADUser
    	}
    }

    LG Patrick

    Montag, 24. November 2014 09:35

Alle Antworten

  • Hallo tagsmas!

    Es gibt mit der PowerShell verschieden Möglichkeiten das Active Directory zu verwalten, bitte sage uns welche Technik du verwendest damit wir dir gezielt helfen können.

    1. Nutzung der Directory Services .NET Klassen (Typen)
    2. Die Active Directory  Cmdlets der Firma DELL (ehemals Quest) aus dem ActiveRoles Management Snapin .
    3. Die Active Directory Cmdlets von Microsoft  aus dem Active Directory Modul
    4. Nutzung von WMI zur Verwaltung von Active Directory (nicht empfohlen und veraltet)

    Sieh meinen Blog Artikel hier: http://www.powershell-group.eu/powershell-active-directory/

    # Das Modul mit den Active Directory Cmdlets von Microsoft laden 
    Import-Module ActiveDirectory 
    
    # Alle OUs (-SearchScope Subtree) unterhalb der -SearchBase durchsuchen 
    Get-AdUser -SearchBase 'OU=hamburg,OU=deutschland,CN=europa,CN=eu' -SearchScope Subtree


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Donnerstag, 20. November 2014 07:59
  • Hallo

    Mit einer Schleife kannst du deine Domäne oder eine spezifische OU durchlaufen... In der Foreach Schleife kannst du also einfach deinen Code zum hinzufügen in die Gruppen integrieren und dann müsste das klappen..

        $ObjFilter = "(&(objectCategory=person)(objectCategory=User))"
        $objSearch = New-Object System.DirectoryServices.DirectorySearcher
        $objSearch.PageSize = 15000
        $objSearch.Filter = $ObjFilter  
        $objSearch.SearchRoot = "LDAP://dc=DOMAIN,dc=LOCAL"
        $AllObj = $objSearch.FindAll()
        
        foreach ($Obj in $AllObj)
               {
               
                $objItem = $Obj.Properties
                write-host $objItem.name
                
                }

    mfg

    pAscii

    Donnerstag, 20. November 2014 13:26
  • Hallo pAscii!

    1.)
    Warum erstellst du erst den Objektfilter in einer Variablen um diesen dann sofort zu benutzen ?
    Das macht keinen Sinn!

    2.)
    Eine Pagesize von 15000 macht keinen Sinn, da alle werte über 1000 wieder auf 1000 reduziert werden.
    Siehe hier: http://msdn.microsoft.com/de-DE/library/ms180880%28v=vs.80%29.aspx

    3.)

    Auch hier sollte man den Searchscope angeben!

    $objSearch = New-Object System.DirectoryServices.DirectorySearcher
    $objSearch.PageSize = 1000
    $objSearch.Filter = '(&(objectCategory=person)(objectCategory=User))' 
    $objSearch.SearchRoot = 'LDAP://OU=hamburg,OU=deutschland,CN=europa,CN=eu'
    $objSearch.SearchScope = 'Subtree'
        
    foreach ($Obj in $objSearch.FindAll()) {
               
      $objItem = $Obj.Properties
      write-host $objItem.name
                
    }
    Die hilfreiche Dokumentation zu der System.DirectoryServices.DirectorySearcher findest du hier:
    http://msdn.microsoft.com/de-de/library/system.directoryservices.directorysearcher%28v=vs.110%29.aspx


    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Donnerstag, 20. November 2014 15:05
  • Hallo tagsmas,

    wenn ich dich richtig verstanden habe, willst du die User auf Basis der OU in der sie sich befinden Gruppen zuweisen oder? Wenn ja, hilft dir vielleicht dieses Skript weiter:

    Import-Module ActiveDirectory
    $ADUserList = Get-AdUser -SearchBase 'OU=SubOU,OU=HauptOU,DC=DeinDC,DC=loc' -Filter *
    foreach($ADUser in $ADUserList)
    {
    	$GroupName = $ADUser.DistinguishedName.Split(",")[2].Replace("OU=","")
    	if((Get-ADGroupMember $GroupName | WHERE {$_.SID -eq $ADUser.SID}) -eq $null)
    	{
    		Add-ADGroupMember -Identity $GroupName -Members $ADUser
    	}
    }

    LG Patrick

    Montag, 24. November 2014 09:35