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?