Die Ursache für ungewollte User sperren in der AD können vielfältig sein. Für diesen Use-Case gehen wir davon aus, das die Sperre durch ein falsch gesetztes Passwort innerhalb der Domain erfolgt, z.B: WLAN MSCAPv2, Scripte, Windows Anmeldeinformationsverwaltung Cache etc.

Damit der User und der Administrator etwas Luft zum Atmen bekommt im Troubleshooting, können Sie automatisch den User entsperren lassen. Dafür benötigen Sie Ihren Domaincontroller, Aufgabenplanung, Powershell und Eventlog.

Automatische Entsperrung über die Aufgabenplanung

Auf dem DC erstellen Sie eine neue Aufgabe, die gestartet wird, wenn das Event: 4740 auftritt.

Aufgabeplanung Parameter

Allgemein: Die Aufgabe ausführen lassen von einem User der Stapelverarbeitung Rechte und Domainadministrator ist.

Trigger: Aufgabe starten:  Bei einem Ereignis

Protokoll: Sicherheit

Ereignis-ID 4740

Aktionen: Programm starten

Programm / Skript: C:\Windows\System32\cmd.exe

Argumente: /c „C:\tasks\gesperrtADKonto\unlock.bat“

Aufruf per Batch in der Aufgabenplanung

In der Batch wird das Powershellscript aufgerufen. Natürlich könnte alles mit Powershell realisiert werden. Evtl. reiche ich das noch nach.

Script: unlock.bat

Mit dem Aufruf des Powershellscripts wird als Übergabeparameter der betroffenen Windows Username und alternativ eine E-Mail-Adresse übergeben.

Der Parameter E-Mail-Adressen ist optional. Er kann als Information für den User dienen. Der Administrator wird in jedem Fall per E-Mail über die Entsperrung informiert. Gesetzt wird der Parameter: $mail_to1

@echo off

rem Author: Michael Haug

set ROOT_PATH=C:\tasks\gesperrtADKonto
SET LOG_PATH=%ROOT_PATH%
SET LOGFILE=%LOG_PATH%\gesperrtADKonto.log

echo %date:~0% - %time:~0,8% Uhr %0 wurde gestartet  >> %LOGFILE%

REM Sofort entsperren wenn EVENT wenn etwas vorliegt
powershell \\<DomainSuffix>\NETLOGON\ps\unlockUser.ps1 <Windowsusername 1> <E-Mail_Adresse>
powershell \\<DomainSuffix>\NETLOGON\ps\unlockUser.ps1 <Windowsusername 2> <E-Mail_Adresse>

Script: unlockUser.ps1 

Der Befehl: Unlock-ADAccount entsperrt den gewünschten User

Unlock-ADAccount -Identity $user 
# Definition der Parameter
Param(
    [string]$WINUSERNAME,
	[string]$MailAdress2
)


# Ausgabe der Parameter
Write-host "1. Windowsname: $WINUSERNAME"
Write-host "2. Email an: $MailAdress2"

$user=$null
$pcname=$env:computername
$mailrelay = "<Servername>"
$from=$pcname
$mail_to1="<Emailadresse zur Info ueber die Sperrung>"
$mail_to2=$null
$Datum = get-date -Format "dd.MM.yyyy - HH:mm:ss"   
$current_folder=split-path -parent $MyInvocation.MyCommand.Definition
$ROOT_LOG=$current_folder
$LOGFILE=$ROOT_LOG + "\unlocked.log"
$scriptName = $MyInvocation.MyCommand.Name
$mailto_array= @()

#Ausgabe aller User die gesperrt sind	
$res= Search-ADAccount -LockedOut -UsersOnly


if($MailAdress2){
	$mail_to2= $MailAdress2
	$mailto_array = @($mail_to1, $mail_to2)
	Write-host "Alternative Empfaengeradresse: $mail_to2" -ForegroundColor Green
	#"$Datum $scriptName Userueberwachung: $WINUSERNAME Alternative Empfaengeradresse: $mail_to2" >> $logfile
} else{
	$mailto_array = @($mail_to1)
	Write-host "Kein Alternative Empfaengeradresse angeben" -ForegroundColor Green
	#"$Datum $scriptName Kein Alternative Empfaengeradresse angeben" >> $logfile
}

Write-host "Starte automatisches entsperren" -ForegroundColor Green
"$pcname - $Datum $scriptName Starte automatisches entsperren" >> $logfile
	
if($WINUSERNAME){
	$user= $WINUSERNAME
}

if ($res) {
	
	#Ist der gesuchte User darunter?
	if ($res -like "*$user*"){
		"$pcname $Datum User: $user ist gesperrt"  >> $LOGFILE
		Write-host "User: $user ist gesperrt" -ForegroundColor Red 
		Unlock-ADAccount -Identity $user 
		Write-host "User: $user ist ent-sperrt" -ForegroundColor Green 
		
		"$pcname $Datum User: Verschicke Email an $mail_to"  >> $LOGFILE
		Send-MailMessage -SmtpServer $mailrelay -to $mailto_array -from $from  -Subject "$pcname Automatische Entsperrung von: $user" -body "$pcname - Automatische Entsperrung von: $user"
		
	} else {
		Write-host "User: $user ist nicht gesperrt" -ForegroundColor Yellow 
		}
    
	} else {
		Write-host "Keine gesperrten User gefunden" -ForegroundColor Yellow 
	}
Kategorien: IT