Seit längerem inaktive Active Directory Benutzer finden, per Mail melden und optional sofort deaktivieren.
Warum?
Aus Sicherheitsgründen ist es nicht ratsam, wenn nicht mehr benötigte Benutzerkonten weiterhin verwendet werden können. Nicht länger benötigte Benutzerkonten sollten schnellstmöglich deaktiviert werden. Ehemalige und aktuelle MitarbeiterInnen oder Hacker könnten sonst die Benutzerkonten unerlaubt verwenden und damit auf Daten innerhalb der Active Directory Domäne zugreifen, diese ändern oder sogar löschen.
PowerShell-Script
Mit dem folgenden PowerShell-Script werden Benutzer die sich seit 30 Tagen nicht angemeldet haben (Active Directory Attribute „LastLogonDate“) ermittelt, an eine Mailadresse gemeldet und bei Bedarf auch gleich deaktiviert ($deaktivieren = $true). Im Idealfall wird das PowerShell-Script regelmäßig über die Windows Aufgabenplanung ausgeführt. Auf dem ausführenden System müssen Domänen-Administrator-Rechte und die Active Directory PowerShell Commandlets vorhanden sein. Außerdem müssen natürlich vorher die Optionen an die vorhandene Active Directory Domäne und den jeweiligen Bedürfnissen angepasst werden:
###################### Optionen ######################
$domainSearchBase = "OU=Benutzer,DC=domain,DC=at" # Active Directory Distinguished Name (DN)
$limitTage = -30 # Benutzer hat sich länger als X Tagen nicht eingeloggt (negativ)
$deaktivieren = $true # $true deaktiviert Benutzer, $false erzeugt nur das Info-Mail
$mailTo = "mailTo@domain.at";
$mailFrom = "mailFrom@domain.at";
$mailSubject = "Inaktive AD-Benutzer";
$mailSMTP = "smtp.domain.at";
$mailHtmlHeader = @"
<style>
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TH {text-align:left;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black; text-align:left;}
H2 {font-size:16px;}
</style>
"@
#######################################################
# Datum berechnen und inaktive Benutzer ermitteln
$dateLimit = (Get-Date).addDays($limitTage)
$adBenutzer = Get-ADUser -SearchBase $domainSearchBase -Properties LastLogonDate -Filter {LastLogonDate -lt $dateLimit -and Enabled -eq $true -and sAMAccountName -ne "administrator"}
$inaktiveBenutzer = $adBenutzer | Sort LastLogonDate | select Name,LastlogonDate
$mailBenutzerListe = $inaktiveBenutzer | ConvertTo-Html -Property Name, LastLogonDate -Head $mailHtmlHeader
# Benutzer deaktivieren
if($deaktivieren -eq $true){
$adBenutzer | Disable-ADAccount
}
# Mail
$body = "Benutzer die seit " + $dateLimit.ToString("dd.MM.yyyy HH:mm") + " nicht angemeldet waren:<br><br>" + $mailBenutzerListe | Out-String
Send-MailMessage -To $mailTo -From $mailFrom -Subject $mailSubject -SmtpServer $mailSMTP -Body $body -BodyAsHtml -encoding ([System.Text.Encoding]::UTF8)
Code-Sprache: PHP (php)