¿Existe una utilidad de línea de comandos de Windows para verificar las credenciales del usuario?

19

En una plataforma Windows, ¿hay alguna utilidad de línea de comandos que pueda pasar una username, password domain namea fin de verificar las credenciales (o posiblemente dará un error que la cuenta está desactivada, no existe o expirado)?

wiki
fuente
2
¿Por qué necesitarías verificar las credenciales de alguien más que las tuyas? Como SysAd responsable y respetable, no necesita conocer las credenciales de otra persona (excepto quizás la raíz o las cuentas de administrador de dominio).
gWaldo
66
@gWaldo: Vine aquí como ingeniero de software que está escribiendo un programa instalador que le pide al usuario las credenciales de una cuenta de máquina existente, que luego almacenamos (encriptado) para llamadas de suplantación de API Win32 a nivel de código. Encontré esta pregunta y respuesta relevantes y útiles, así como legítimas.
Mike Atlas
1
Configuré a los usuarios con una contraseña predeterminada y les indiqué que la cambiaran. Ahora, un par de semanas después, quiero saber quién tiene y quién no.
Mark Berry
@MarkBerry debe marcar la casilla de verificación en el perfil del usuario obligándolos a cambiar su contraseña en el próximo inicio de sesión.
Craig
2
@Craig, incluso si los obligo a cambiar su contraseña al iniciar sesión, eso todavía no garantiza que hayan iniciado sesión una semana o un mes después; Necesito una forma de verificar desde la línea de comandos. El cambio forzado de contraseña incluso puede bloquear usuarios remotos si la autenticación de nivel de red está habilitada. Y a veces, la empresa (cliente) requiere un toque más suave que forzar un cambio de contraseña.
Mark Berry

Respuestas:

14

Puede usar el net usecomando, especificando el nombre de usuario y la contraseña en la línea de comando (en el formulario net use \\unc\path /user:username passwordy verifique la errorleveldevolución para verificar si una credencial es válida.

El runascomando también funcionaría, excepto que le resultará más difícil probar la salida.

Probar una credencial para la existencia de una cuenta sería una cuestión de usar net usero dsquery. El net usercomando no le dirá si una cuenta está bloqueada, pero consultar el lockoutTimeatributo de la cuenta de usuario podría decirle eso.

Evan Anderson
fuente
77
runas /user:username cmdabrirá una nueva ventana de línea de comandos como usernamesi proporcionara una contraseña válida y ese usuario pueda iniciar sesión en esta computadora. Comúnmente abriré un shell para probar que la contraseña sigue siendo la predeterminada en función de su información personal que puedo buscar.
PsychoData
13

En Powershell:

Function Test-ADAuthentication {
    param($username,$password)
    (new-object directoryservices.directoryentry "",$username,$password).psbase.name -ne $null
    }

PS C:\> Test-ADAuthentication "dom\myusername" "mypassword"
True
PS C:\>

Referencia: /programming/7663219/how-to-authenticate-an-user-in-activedirectory-with-powershell

usuario224310
fuente
Estoy llegando ObjectNotFound: (Test-ADAuthentication:String) [], CommandNotFoundExceptionaqui. ¿Funciona esto exclusivamente en un controlador de dominio y no para cuentas locales?
SaAtomic
1
@SaAtomic Debe definir la función en su sesión antes de ejecutarla. Test-ADAuthenticationno está integrado en PowerShell
Kolob Canyon
1
Una cosa que realmente no me gusta de su respuesta es que no lee la contraseña como una cadena segura. Las contraseñas de texto sin formato son siempre una mala idea. $pass = Read-Host -assecurestring 'Enter password'
Kolob Canyon
1

Solo quería agregar que dado que AD es un servidor LDAP, puede usar una herramienta de línea de comando LDAP para 'enlazarlo', lo que confirma si está activo o no. También puede vincularse como usuario con mayores privilegios y luego buscar AD utilizando los principios de LDAP.

Pero bueno, ¡no hay nada malo con Powershell!

Gerard ONeill
fuente