2016-10-19 1 views
1

diesen Code in das Ausführen eines Skripts (das aus einem Formular packt Details) eine Liste von Benutzergruppen zu erhalten und von allen außer Gruppe mit dem Namen „Gruppe1“ und „Group2“ entfernen:foreach loop läuft zweimal?

#remove any group memberships except Group1 and Group2 
$groups = Get-ADPrincipalGroupMembership $Inputsamaccountname.Text | Where-Object -filter {$_.name -ne 'Group1' -And $_.name -ne 'Group2'} 
foreach ($group in $groups) { 
    $group = $groups.Name 
    $RemovegroupMsg = "Removing " + $inputSamAccountName.Text + " from " + $group 
    logentryDateTime $removeGroupMsg 
    Remove-ADPrincipalGroupMembership -Identity $inputSamAccountName.Text -MemberOf $group -Confirm:$false 
    if ($Error) { 
     $errorMessage = "Error removing " + $inputSamAccountName.Text + " from " + $group + " " + ($Error[0].ToString()) + " continuing." 
     logentryDateTime $errorMessage 
     $Error.Clear() 
     continue 
    } elseif (!$Error) { 
     Write-Output "" >> $outlogfile 
     logentryDateTime "Successfully removed " + $inputSamAccountName.Text + " from " + $group 
    } 
} 

Das Skript arbeitet und Sie kann sehen, dass die Gruppen entfernt wurden, aber Logs zeigen ein "Kann Argument nicht an Parameter 'Name' binden, weil es Null ist." Fehler für jede Gruppe, die diesen Kriterien entspricht ".

[2016-10-19 113117-820] : Removing user.test1 from Other-group 
[2016-10-19 113117-820] : Error removing user.test1 from Other-group Cannot bind argument to parameter 'Name' because it is null. continuing.

Ich weiß es wahrscheinlich etwas wirklich einfach in der Logik der foreach Schleife ist mir persönlich fehlt

Antwort

4

Diese Linie scheint, wie Ihr Problem: $group = $groups.name Es ist ($groups) innerhalb einer foreach Schleife, die über diese Elemente iteriert. Meinten Sie $group = $group.name?

+0

Vielen Dank. – J1raya

+2

Kein Problem man. Wenn das Ihre Frage löst, markieren Sie bitte die angenommene Antwort. –