Esiste un'utilità della riga di comando di Windows per verificare le credenziali dell'utente?


19

Su una piattaforma Windows, esiste un'utilità della riga di comando a cui posso passare un username, password domain nameper verificare le credenziali (o eventualmente dare un errore che l'account è disabilitato, non esiste o è scaduto)?


2
Perché dovresti verificare le credenziali di chiunque ma le tue. Come amministratore di sistema responsabile e rispettabile, non hai bisogno di conoscere le credenziali di nessun altro (tranne forse gli account root o Domain Admin).
gWaldo,

6
@gWaldo: Sono venuto qui come ingegnere del software che sta scrivendo un programma di installazione che chiede a un utente le credenziali di un account macchina esistente, che successivamente memorizziamo (crittografato) per chiamate di rappresentazione dell'API Win32 a livello di codice. Ho trovato questa domanda e una risposta pertinenti e utili, oltre che legittime.
Mike Atlas,

1
Ho impostato gli utenti con una password predefinita e ho chiesto loro di cambiarla. Ora un paio di settimane dopo, voglio sapere chi ha e chi no.
Mark Berry,

@MarkBerry dovresti semplicemente spuntare la casella nel profilo utente costringendoli a cambiare la loro password al prossimo accesso.
Craig,

2
@Craig, anche se li costringo a cambiare la password all'accesso, ciò non garantisce che abbiano effettuato l'accesso una settimana o un mese dopo; Ho bisogno di un modo per controllare dalla riga di comando. La modifica forzata della password può persino bloccare gli utenti remoti se è abilitata l'autenticazione a livello di rete. E a volte, l'azienda (cliente) richiede un tocco più morbido rispetto a forzare una modifica della password.
Mark Berry,

Risposte:


14

È possibile utilizzare il net usecomando, specificando il nome utente e la password nella riga di comando (nel modulo net use \\unc\path /user:username passworde controllare il errorlevelreso per verificare se una credenziale è valida.

Anche il runascomando funzionerebbe, tranne per il fatto che avrai un tempo più duro per testare l'output.

Testare una credenziale per l'esistenza di un account sarebbe una questione di utilizzo net usero dsquery. Il net usercomando non ti dirà se un account è bloccato, ma interrogare l' lockoutTimeattributo dell'account utente potrebbe dirlo.


7
runas /user:username cmdaprirà una nuova finestra della riga di comando come usernamese tu fornissi la password valida e quell'utente possa accedere a questo computer. Solitamente aprirò una shell per testare che la password è ancora predefinita in base alle loro informazioni personali che posso cercare.
PsychoData,

13

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

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


Sto arrivando ObjectNotFound: (Test-ADAuthentication:String) [], CommandNotFoundExceptionqui Funziona esclusivamente su un controller di dominio e non per account locali?
SaAtomic,

1
@SaAtomic È necessario definire la funzione nella sessione prima di eseguirla. Test-ADAuthenticationnon è integrato in PowerShell
Kolob Canyon,

1
Una cosa che non mi piace della tua risposta è che non leggi la password come una stringa sicura. Le password in testo normale sono sempre una cattiva idea. $pass = Read-Host -assecurestring 'Enter password'
Kolob Canyon,

1

Volevo solo aggiungere che poiché AD è un server LDAP, è possibile utilizzare uno strumento da riga di comando LDAP per "collegarsi" ad esso, confermando così se è attivo o meno. È inoltre possibile eseguire il binding come utente con privilegi più elevati e quindi cercare AD utilizzando i principi LDAP.

Ma hey ... niente di male in Powershell!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.