Benutzer mit den meisten Antworten
Dynamisch ou's durchlaufen

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
lagerusw. Ihr wisst wie ich's meine. Frage also wie gehe ich durch diese ou's??
Dank im vorraus
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+- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 27. November 2014 07:55
-
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
- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 27. November 2014 07:55
-
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.aspx3.)
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+- Bearbeitet Peter Kriegel Donnerstag, 20. November 2014 17:37
- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 27. November 2014 07:55
-
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- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 27. November 2014 07:55
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+- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 27. November 2014 07:55
-
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
- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 27. November 2014 07:55
-
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.aspx3.)
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+- Bearbeitet Peter Kriegel Donnerstag, 20. November 2014 17:37
- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 27. November 2014 07:55
-
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- Als Antwort markiert Teodora MilushevaModerator Donnerstag, 27. November 2014 07:55