Hallo,
bei meinem PowerShell Script, dass ermitteln soll, welche Benutzerkonten abgelaufen sind, alle Gruppenmitgliedschaften des jeweiligen Benutzers bis auf "Domänen-Benutzer" entfernt, diesen dann in die OU für deaktivierte Benutzer verschieben und deaktivieren soll bekomme ich eine Fehlermeldung und ich steh ehrlich gesagt auf dem Schlauch...
Hier mal das Script
# ActiveDirectory Modul importieren Import-Module ActiveDirectory -Verbose:$false #Abgelaufene Benutzerkonten Write-Verbose 'Suche nach abgelaufenen Benutzerkonten' $ExpiredAccounts = Search-ADAccount -AccountExpired -UsersOnly | Where-Object { $_.Enabled -eq $true } Write-Verbose "$(@($ExpiredAccounts).count) abgelaufene Benutzerkonten gefunden" #Gruppen die nicht entfernt werden sollen $ExcludedGroups = @( 'CN=Domänen-Benutzer,OU=Users,DC=xx,DC=yy' ) #Abgelaufene Benutzerkonten in die folgende OU verschieben $DisabledOU = 'OU=__disabled,DC=xx,DC=yy' #Aktuelles Datum abrufen $Date = Get-Date -Format g #Deaktivierte Benutzer durchforsten ForEach($User in $ExpiredAccounts) { Write-Verbose "Gruppenmitgliedschaften von $($user.SamAccountName) werden kontrolliert" #Gruppenmitgliedschaften des Benutzers abrufen $userMembership = Get-ADUser $user.SamAccountName -Properties MemberOf | Select-Object -ExpandProperty memberoff Write-Verbose "Benutzerkonto ist mitgleid von: $(@($userMembership.Count)) Gruppen" foreach($member in $userMembership) { # Benutzer aus Gruppen entfernen if (!$ExcludedGroups.Contains($member)){ try{ Write-Verbose "Entferne Benutzer $($User.SamAccountName) aus $($member)" Get-ADGroup $member | Remove-ADGroupMember -Members $user.SamAccountName -Confirm:$false } catch{ Write-Error "Fehler beim Benutzer $($User.Name) beim entfernen aus der Gruppe `'$member`'" } } } #Benutzer verschieben und deaktivieren try{ # Beschreibung ändern und deaktivieren Write-Verbose "Ändere Beschreibung des Benutzers: `"Deaktiviert am $Date`"" Set-ADUser -Identity $User.SamAccountName -Description "Deaktiviert am $Date" -Enabled $false # Benutzer in __disabled OU verschieben Write-Verbose 'Verschiebe Benutzer in die OU __disabled' Get-ADUser -identity $User.SamAccountName | Move-ADobject -targetpath $DisabledOU } catch{ Write-Error "Fehler bei folgendem Benutzer `'$($User.DistinguishedName)`'" } }Get-ADUser : Das Argument für den Parameter "Identity" kann nicht überprüft werden. Das Argument ist NULL. Geben Sie ein Argument an, das nicht NULL ist, und führen Sie dann den Befehl erneut aus.
Bei xx.ps1:20 Zeichen:41
+ $BenutzerMitgliedschaften = Get-ADUser <<<< $user.SamAccountName -Properties MemberOf | Select-Object -ExpandProperty memberoff
+ CategoryInfo : InvalidData: (:) [Get-ADUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "Contains" enthält.
Bei xx.ps1:23 Zeichen:42
+ if (!$AuszuschließeneGruppen.Contains <<<< ($member)){
+ CategoryInfo : InvalidOperation: (Contains:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
xx.ps1 : Fehler bei folgendem Benutzer ''
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,xx.ps1
Desweiteren, muss ich bei jedem Write-Error und Write-Verbose das Argument -Message anfügen oder reicht es $VerbosePrefence = "Continue" zu definieren?