Ad Gruppe User Removen wenn die Description ändert - Powershell

D44

Cadet 3rd Year
Registriert
Jan. 2019
Beiträge
40
Ich bin noch ziemlich neu mit Powershell unterwegs und habe nun ein Problem. Ich möchte einen Mail Verteiler erstellen welche wöchentlich aktualisiert wird. User hinzufügen ist kein Problem, jedoch möchte ich das es die User bei denen die Description ändert removed werden sobald diese nicht mehr übereinstimmt. Ich habe eine Arraylist in welcher alle Description aufgelistet sind welche zu lässlich sein sollen.

Add:
$Descriptions = @("Supporter","System Eng", "etc.","etc.")
Foreach($Description in $Descriptions){
$user = Get-ADUser -Filter * –SearchBase "OU=Int,OU=user,OU=1,DC=test,DC=me,DC=nl" -properties *| Where-Object {$_.Description -like $Description}
$group = Get-ADGroup "CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl"

Add-ADGroupMember $group -Members $user

}


Remove:
$groupname = 'testgroup'
$members = Get-ADUser -LDAPFilter "(&(!(description=$Descriptions))(memberOf=CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl))"

foreach($member in $members)
{
Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname-Confirm:$false
}
 
Wo liegt denn genau das Problem?

Was mir so aufgefallen ist:
PowerShell:
$group = Get-ADGroup "CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl"
Die Gruppe wird in der Schleife immer wieder neu ermittelt

PowerShell:
$user = Get-ADUser -Filter * –SearchBase "OU=Int,OU=user,OU=1,DC=test,DC=me,DC=nl" -properties *| Where-Object {$_.Description -like $Description}
Bei jedem Schleifendurchlauf werden alle User (der OU) mit allen Eigenschaften ausgegeben. Besser ist es hier direkt den Filter auf "Description" setzen.

PowerShell:
$members = Get-ADUser -LDAPFilter "(&(!(description=$Descriptions))(memberOf=CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl))"
Die Benutzer die entfernt werden sollen werden anders bestimmt als, die die aufgenommen werden, diese kann schnell dazu führen, dass man Schnittverluste hat. Besser man bestimmt einmal, welche User in der Gruppe seien sollen und entfernt dann alle anderen ( mit "-notin" z.B.)

Code:
Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname-Confirm:$false
Hier fehlt ein Leerzeichen vor dem "-Confirm"
das ".samaccountname" solle überflüssig sein
Es ist besser direkt mit einer Gruppe zu arbeiten anstatt den Namen zu verwenden
Ergänzung ()

PowerShell:
$Descriptions  = 'description1','description2','description3'
$Descriptions  | Foreach-Object -Begin {
    $LDAPFilter = '(|'
} -Process {
    $LDAPFilter += "(description=$_)"
} -End {
    $LDAPFilter += ')'
}
$UsersToAdd=Get-ADUser -LDAPFilter $LDAPFilter –SearchBase "OU=Int,OU=user,OU=1,DC=test,DC=me,DC=nl" 

$group = Get-ADGroup "CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl"

Remove-ADGroupMember $group -Members (Get-ADGroupMember $group) -Confirm:$false

Add-ADGroupMember $group -Members $UsersToAdd
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: D44
sklaes schrieb:
Wo liegt denn genau das Problem?

Was mir so aufgefallen ist:
PowerShell:
$group = Get-ADGroup "CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl"
Die Gruppe wird in der Schleife immer wieder neu ermittelt

PowerShell:
$user = Get-ADUser -Filter * –SearchBase "OU=Int,OU=user,OU=1,DC=test,DC=me,DC=nl" -properties *| Where-Object {$_.Description -like $Description}
Bei jedem Schleifendurchlauf werden alle User (der OU) mit allen Eigenschaften ausgegeben. Besser ist es hier direkt den Filter auf "Description" setzen.

PowerShell:
$members = Get-ADUser -LDAPFilter "(&(!(description=$Descriptions))(memberOf=CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl))"
Die Benutzer die entfernt werden sollen werden anders bestimmt als, die die aufgenommen werden, diese kann schnell dazu führen, dass man Schnittverluste hat. Besser man bestimmt einmal, welche User in der Gruppe seien sollen und entfernt dann alle anderen ( mit "-notin" z.B.)

Code:
Remove-ADGroupMember -Identity $groupname -Member $member.samaccountname-Confirm:$false
Hier fehlt ein Leerzeichen vor dem "-Confirm"
das ".samaccountname" solle überflüssig sein
Es ist besser direkt mit einer Gruppe zu arbeiten anstatt den Namen zu verwenden
Ergänzung ()

PowerShell:
$Descriptions  = 'description1','description2','description3'
$Descriptions  | Foreach-Object -Begin {
    $LDAPFilter = '(|'
} -Process {
    $LDAPFilter += "(description=$_)"
} -End {
    $LDAPFilter += ')'
}
$UsersToAdd=Get-ADUser -LDAPFilter $LDAPFilter –SearchBase "OU=Int,OU=user,OU=1,DC=test,DC=me,DC=nl"

$group = Get-ADGroup "CN=testgroup,OU=Dirs,OU=Global,OU=group,OU=1,DC=test,DC=me,DC=nl"

Remove-ADGroupMember $group -Members (Get-ADGroupMember $group) -Confirm:$false

Add-ADGroupMember $group -Members $UsersToAdd


Super vielen Dank ich werde das mal anschauen und umsetzen.
 
Zurück
Oben