Tester authentification AD avec PowerShell
Table of Contents
No matching heading
Tester un mot de passe
Il est parfois nécessaire de tester des identifiants Active Directory afin de valider la conformité du login ou du mot de passe. Par exemple suite à la création en masse d’utilisateurs.
Les actions les plus souvent utilisées pour tester sont la connexion à un bureau à distance (RDP) ou la connexion à un webmail. Cependant, soit le nombre d’identifiants à tester est trop important, soit aucun service n’est accessible pour tester une authentification.
PowerShell à la rescousse
⚠️
Attention de ne pas tester des authentifications en boucle avec un mauvais mot de passe, sinon cela peut engendrer un verrouillage du compte AD.
Le script a été testé pour une authentification NTLM avec domain\sAMAccountName.
L'authentification Kerberos n'a pas été testée.
Ces méthodes peuvent ne pas fonctionner pour les utilisateurs du groupe Protected Users ou si NTLM a été désactivé.
Le script a été testé pour une authentification NTLM avec domain\sAMAccountName.
L'authentification Kerberos n'a pas été testée.
Ces méthodes peuvent ne pas fonctionner pour les utilisateurs du groupe Protected Users ou si NTLM a été désactivé.
PowerShell permet de tester des authentifications login/mot de passe auprès d’un Active Directory avec l’une de ces deux méthodes :
$userName = 'xxxx'
$password = 'yyyy'
Function Test-ADAuthentication {
param(
$username,
$password)
(New-Object DirectoryServices.DirectoryEntry "",$username,$password).psbase.name -ne $null
}
Test-ADAuthentication -username $UserName -password $passwordou une fonction avancée si vous devez tester sur un autre domaine :
function Test-ADAuthentication {
Param(
[Parameter(Mandatory)]
[string]$User,
[Parameter(Mandatory)]
$Password,
[Parameter(Mandatory = $false)]
$Server,
[Parameter(Mandatory = $false)]
[string]$Domain = $env:USERDOMAIN
)
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$contextType = [System.DirectoryServices.AccountManagement.ContextType]::Domain
$argumentList = New-Object -TypeName "System.Collections.ArrayList"
$null = $argumentList.Add($contextType)
$null = $argumentList.Add($Domain)
if($null -ne $Server){
$argumentList.Add($Server)
}
$principalContext = New-Object System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $argumentList -ErrorAction SilentlyContinue
if ($null -eq $principalContext) {
Write-Warning "$Domain\$User - AD Authentication failed"
}
if ($principalContext.ValidateCredentials($User, $Password)) {
Write-Host -ForegroundColor green "$Domain\$User - AD Authentication OK"
}
else {
Write-Warning "$Domain\$User - AD Authentication failed"
}
}
#Test-ADAuthentication -User toto -Password passXX
#Test-ADAuthentication -User toto -Password passXX -Server xxx.domain.comLes valeurs de retour sont :
- TRUE si l'authentification a réussi
- FALSE si l’authentification a échoué. L’échec peut être dû à :
- mauvais login. Vérifier si l’utilisateur existe
- mauvais mot de passe
- compte AD verrouillé :
Get-ADUser -Identity xxx -Properties LockedOut,AccountLockoutTime | Select samaccountname,LockedOut,AccountLockoutTime - compte AD désactivé :
Get-ADUser -Identity xxxx | Select samaccountname,Enable