Ad Gruppe User Removen wenn die Description ändert - Powershell

D44

Cadet 3rd Year
Dabei seit
Jan. 2019
Beiträge
35
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
}
 

sklaes

Lt. Junior Grade
Dabei seit
Juni 2004
Beiträge
361
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

D44

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Jan. 2019
Beiträge
35
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.
 

alQamar

Lt. Commander
Dabei seit
Aug. 2009
Beiträge
1.263
Top