Existe um utilitário de linha de comando do Windows para verificar as credenciais do usuário?

19

Em uma plataforma Windows, existe algum utilitário de linha de comando que eu possa transmitir para username, password domain namea fim de verificar as credenciais (ou possivelmente dar um erro de que a conta está desativada, não existe ou expirou)?

wiki
fonte
2
Por que você precisaria verificar as credenciais de alguém, exceto a sua. Como SysAd responsável e respeitável, você não precisa conhecer as credenciais de outras pessoas (exceto talvez as contas raiz ou de administrador do domínio).
gWaldo
6
@gWaldo: eu vim aqui como engenheiro de software que está escrevendo um programa de instalação que solicita ao usuário as credenciais de uma conta de máquina existente, que depois armazenamos (criptografados) para chamadas de representação da API do Win32 no nível de código. Encontrei essa pergunta e respondo relevante e útil, além de legítima.
Mike Atlas
1
Configurei os usuários com uma senha padrão e instruí-os a alterá-la. Agora, algumas semanas depois, quero saber quem tem e quem não tem.
Mark Berry
@ MarkBerry, basta marcar a caixa de seleção no perfil do usuário, forçando-o a alterar sua senha no próximo logon.
Craig
2
@ Craig, mesmo que eu os force a alterar sua senha no login, isso ainda não garante que eles tenham entrado uma semana ou um mês depois; Eu preciso de uma maneira de verificar a partir da linha de comando. A alteração forçada da senha pode até bloquear usuários remotos se a autenticação no nível da rede estiver ativada. E, às vezes, a empresa (cliente) exige um toque mais suave do que forçando uma alteração de senha.
22615 Mark Berry

Respostas:

14

Você pode usar o net usecomando, especificando o nome de usuário e a senha na linha de comando (no formulário net use \\unc\path /user:username passworde verifique os errorlevelretornados para verificar se uma credencial é válida.

O runascomando também funcionaria, exceto que você terá mais dificuldade em testar a saída.

Testar uma credencial para a existência de uma conta seria uma questão de usar net useror dsquery. O net usercomando não informa se uma conta está bloqueada, mas consultar o lockoutTimeatributo da conta do usuário pode dizer isso.

Evan Anderson
fonte
7
runas /user:username cmdabrirá uma nova janela de linha de comando como usernamese você fornecesse a senha válida e esse usuário pudesse efetuar login neste computador. Normalmente, eu vou abrir um shell para testar se a senha ainda é o padrão com base nas informações pessoais que posso procurar.
PsychoData
13

Em 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:\>

Referência: /programming/7663219/how-to-authenticate-an-user-in-activedirectory-with-powershell

user224310
fonte
Estou chegando ObjectNotFound: (Test-ADAuthentication:String) [], CommandNotFoundExceptionaqui. Isso funciona exclusivamente em um controlador de domínio e não em contas locais?
SaAtomic
1
@SaAtomic Você precisa definir a função na sua sessão antes de executá-la. Test-ADAuthenticationnão é construído em powershell
Kolob Canyon
1
Uma coisa que realmente não gosto na sua resposta é que você não lê a senha como uma string segura. Senhas de texto simples são sempre uma má idéia. $pass = Read-Host -assecurestring 'Enter password'
Kolob Canyon
1

Só queria acrescentar que, como o AD é um servidor LDAP, você pode usar uma ferramenta de linha de comando LDAP para 'vincular' a ele, confirmando se está ativo ou não. Você também pode vincular como usuário com privilégios mais altos e pesquisar o AD usando os princípios LDAP.

Mas ei-- nada de errado com o PowerShell!

Gerard ONeill
fonte