Moin moin liebe Powershell-Community,
heute bringe ich ein fast vollendetes Powershell-Skript mit. Kurz zur Funktion:
Das Skript prüft vorab alle User aus der "OU=To Delete" ob dessen HomeDirectory sich bei einem weiteren User im ActiveDirecotry wieder finden lässt. Falls nein darf der User älter als 365 Tage gelöscht werden inkl. Homedirectory und TerminalServer-Profil.
So sieht das Ganze aus:
$Date = Get-Date $infomailbody = "" $a = @() $a = Get-ADUser -SearchBase "ou=To Delete,dc=irgend,dc=einer" -Filter * -Properties homedirectory | select samAccountName, homedirectory -Unique $BadUser = @() $GoodUser = @() $GoodUsers = @() $SammiUsers = @() $a | %{ clv h,h2,hc,gooduser,baduser #Write-Host "Checking user $_" -F magenta if ($_.homedirectory){ $h = $_.homedirectory $h2 = $h.Substring(($h.IndexOf("$")+2)) $h3 = "*" + $h2 #$h -Match "^\\\\.*\\.*\$\\(.*)$" if (Get-ADUser -filter {homedirectory -like $h3}) { $t = @(Get-ADUser -filter {homedirectory -like $h3}) $hc = $t.Count } else { $hc = 0 } #Write-Host "$h2`: ($hc)" -F cyan } else { $h = "" } if (1 -ne $hc) { Write-Host "Kein, oder mehrere Homelaufwerke gefunden: $($_.samAccountName)" -F red #$BadUser += "$($_.samAccountName)" #Write-Host "$BadUser" -F red } else { Write-Host "$h2 OK" -F green #$GoodUser += "$h2" #Write-Host "$GoodUser" -F green }$GoodUsers += $h2 } $GoodUsers | export-csv -path c:\temp\DeletedUsers\LastDeleted-Users.csv #Nur zum Test, was in $GoodUsers abgelegt wird. Foreach ($Sammi in $GoodUsers){ $SammiUsers += Get-ADUser -Filter "sAMAccountName -eq '$Sammi'" -Properties "LastLogonDate" } $SammiUsers Foreach ($User in $SammiUsers){ If ($User.Enabled -eq $False){ If ($User.LastLogonDate -ne $Null){ If ((($User.LastLogonDate).Subtract($date) | Select -ExpandProperty Days) -le "-365"){ $Source = Get-ADUser $User -Properties homedirectory | Select -ExpandProperty HomeDirectory $UserAcc = $User.Name $Source #Remove-Item $Source -Force -Recurse #robocopy $Source "\\fileserver\f$\Sicherung\$UserAcc" /MOVE /E Write-Host "hier haette ich das R-Laufwerk vernichtet $Source" #Remove-ADUser -Identity $User -confirm:$false Write-Host "hier haette ich das AD-Konto vernichtet $User" $infomailbody += "$User und $Source geloescht." #$User.Name $Username = $User.Name + "," + $User.GivenName + "," + $User.Surname #$Username #Start-Sleep -s 2 } } } } Send-MailMessage -SmtpServer MailRelay -from "Skript@Skriptersteller.com" -to "Log-Verteiler" -subject "JobBericht User-Loeschen 365 Days auf Skript vom $date" -body $infomailbody
Doch wo hakt es jetzt?
Das Array $GoodUsers wird nicht richtig befüllt. In der CSV-Datei hab ich festgestellt, dass die Länge und nicht der "String" samAccountName gespeichert wird. Ich sehe den Wald vor lauter Bäumen nicht mehr und hoffe hier auf Rat von euch.
Nach der Prüfung des HomeDirectory erwarte ich eigentlich ein mit samAccountNamen gefülltes Array, auf das ich per ForEach die AD-Objecte wieder abfragen kann, um in der nächsten Routine die HomeDirectories sowie AD-Konten löschen zu können.
Arg hoffentlich nicht zu verworren.
Grüße aus dem Norden