Venho através deste post trazer uma função bem útil com o objetivo de validar a autenticação de um usuário e senha no Active Directory.
Você pode utilizá-lo desde para verificar a integridade da senha de uma conta ou até mesmo para complementar um script como método de validação se a senha está correta.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# Declarar Função 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 $contextT = [System.DirectoryServices.AccountManagement.ContextType]::Domain $contextO = [System.DirectoryServices.AccountManagement.ContextOptions]::Negotiate $argumentList = New-Object -TypeName "System.Collections.ArrayList" $null = $argumentList.Add($contextT) $null = $argumentList.Add($Domain) If($null -ne $Server){ $argumentList.Add($Server) } $principalC = New-Object System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $argumentList -ErrorAction SilentlyContinue if($null -eq $principalC){ return $false } if ($principalC.ValidateCredentials($User, $Password, $contextO)){ return $true } else{ return $false } } # Carregar objetos para exibição de MsgBox Add-Type -AssemblyName PresentationFramework Add-Type -AssemblyName Microsoft.VisualBasic # Uso da Função Do{ # Solicita usuário e senha $Credential = Get-Credential -Message "Digite apenas o login e senha de usuário para validar no domínio atual:" $User = $Credential | Select Username -ExpandProperty Username $Pass = $Credential.GetNetworkCredential() | Select Password -ExpandProperty Password #Retire o comentário da próxima linha para consultar outro domínio #$Domain = "outrodominio.local" # Executa função (Retire o comentário na próxima linha caso esteja utilizando outro domínio) $Validar = Test-ADAuthentication -User $User -Password $Pass #-Domain $Domain If($Validar -eq $false){ [Microsoft.VisualBasic.Interaction]::MsgBox("ERRO: As credenciais para o usuário "+$User+" estão incorretas! Favor digitar novamente.",'OKOnly,SystemModal,Exclamation','Test-ADAuthentication'); } Else{ [Microsoft.VisualBasic.Interaction]::MsgBox("SUCESSO: As credenciais para o usuário "+$User+" estão corretas!",'OKOnly,SystemModal,Exclamation','Test-ADAuthentication'); } }While($Validar -ne $true) |
Instruções:
- Uso básico: Execute o script por completo, informe apenas seu login e senha;
- O script irá validar seu usuário e senha no domínio atual e retornar o resultado através de MsgBox;
- Caso você erre a senha, o script irá lhe solicitar uma nova tentativa até o sucesso;
- Para alternar domínios, retire os comentários nas linhas 49 e 52.
Lembrando que a grande maioria dos métodos utilizados para construção da lógica está disponível aqui no Blog. Espero que seja útil!
Até a próxima pessoal!