Tester authentification AD avec PowerShell
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
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 $password
ou 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.com
Les 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
Recommended for you
Property set Personal Information and Active Directory security and governance
Find attributes in a Property Set
Impact utilisation Set-ADDefaultDomainPasswordPolicy