Digamos que tengo un objeto PSCrendential
en PowerShell que creé usando Get-Credential
.Validación de PowerShell PSCredential
¿Cómo puedo validar la entrada en contra de Active Directory?
Por ahora encontraron esta manera, pero creo que es un poco feo:
[void][System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices.AccountManagement")
function Validate-Credentials([System.Management.Automation.PSCredential]$credentials)
{
$pctx = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Domain, "domain")
$nc = $credentials.GetNetworkCredential()
return $pctx.ValidateCredentials($nc.UserName, $nc.Password)
}
$credentials = Get-Credential
Validate-Credentials $credentials
[Editar, dos años más tarde] Para los futuros lectores, por favor tenga en cuenta que Test-Credential
o Test-PSCredential
son mejores nombres, porque Validate
no es un verbo PowerShell válida (ver Get-Verb
)
Entiendo que PSCredentials es un proveedor de autenticación independiente (básicamente es un contenedor simple para nombre de usuario/contraseña), pero este requisito me parece muy común. –
@SteveB Es una tarea muy común para administradores de sistemas y desarrolladores, especialmente para aquellos que trabajan en AD, por eso (IMO) Microsoft hace AccountManagement. Aquí puede ver una variedad de formas utilizadas en C# para realizar esta tarea: http://stackoverflow.com/questions/290548/c-sharp-validate-a-username-and-password-against-active-directory –
De hecho , las mejores prácticas de desarrollo general se aplican aquí. Especialmente puedo ocultar la complejidad de esta función y luego simplemente llamar a la función :) –