Czy istnieje narzędzie wiersza polecenia systemu Windows do weryfikowania poświadczeń użytkownika?

19

Czy na platformie Windows jest jakieś narzędzie wiersza polecenia, które mogę przekazać username, password domain nameaby zweryfikować poświadczenia (lub ewentualnie podać błąd, że konto jest wyłączone, nie istnieje lub wygasło)?

wiki
źródło
2
Dlaczego miałby pan musiał zweryfikować niczyich poświadczenia, ale własne. Jako odpowiedzialna i szanowana SysAd, nie musisz znać poświadczeń innych osób (z wyjątkiem być może kont root lub Domain Admin).
gWaldo
6
@gWaldo: Przybyłem tutaj jako inżynier oprogramowania, który pisze program instalacyjny, który pyta użytkownika o poświadczenia istniejącego konta komputera, które następnie przechowujemy (szyfrujemy) do podszywania się pod kodowe wywołania Win32 API. Uznałem to pytanie i odpowiedź za istotne i przydatne, a także uzasadnione.
Mike Atlas,
1
Ustawiłem użytkowników z domyślnym hasłem i poleciłem im je zmienić. Teraz kilka tygodni później chcę wiedzieć, kto ma, a kto nie.
Mark Berry
@ MarkBerry powinieneś po prostu zaznaczyć pole wyboru w profilu użytkownika, zmuszając ich do zmiany hasła przy następnym logowaniu.
Craig,
2
@Craig, nawet jeśli zmuszę ich do zmiany hasła przy logowaniu, nadal nie gwarantuje to, że zalogowali się tydzień lub miesiąc później; Potrzebuję sposobu, aby to sprawdzić z wiersza polecenia. Wymuszona zmiana hasła może nawet zablokować zdalnych użytkowników, jeśli włączone jest uwierzytelnianie na poziomie sieci. A czasami firma (klient) wymaga delikatniejszego dotyku niż wymuszania zmiany hasła.
Mark Berry,

Odpowiedzi:

14

Możesz użyć net usepolecenia, podając nazwę użytkownika i hasło w wierszu polecenia (w formularzu net use \\unc\path /user:username passwordi sprawdź errorlevelzwrócone, aby sprawdzić, czy poświadczenie jest prawidłowe.

runasKomenda będzie działać też oprócz tego, że masz zamiar mieć twardszy czas próby wyjścia.

Testowanie poświadczenia istnienia konta byłoby kwestią użycia net userlub dsquery. net userKomenda nie powie, jeśli konto jest zablokowane, ale odpytywanie lockoutTimeatrybut konta użytkownika mógłby ci to powiedzieć.

Evan Anderson
źródło
7
runas /user:username cmdotworzy nowe okno wiersza poleceń username, jakbyś podał prawidłowe hasło, a użytkownik może zalogować się na tym komputerze. Zwykle otwieram powłokę, aby sprawdzić, czy hasło jest nadal domyślne na podstawie ich danych osobowych, które mogę wyszukać.
PsychoData,
13

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

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

użytkownik224310
źródło
Dostaję się ObjectNotFound: (Test-ADAuthentication:String) [], CommandNotFoundExceptiontutaj. Czy działa to wyłącznie na kontrolerze domeny, a nie na kontach lokalnych?
SaAtomic
1
@ SaAtomic Przed uruchomieniem musisz zdefiniować funkcję w swojej sesji. Test-ADAuthenticationnie jest wbudowany w PowerShell
Kolob Canyon
1
Jedną z rzeczy, których tak naprawdę nie lubię w twojej odpowiedzi, jest to, że nie czytasz hasła jako bezpiecznego ciągu. Hasła w postaci zwykłego tekstu to zawsze zły pomysł. $pass = Read-Host -assecurestring 'Enter password'
Kolob Canyon
1

Chciałem tylko dodać, że ponieważ AD jest serwerem LDAP, możesz użyć narzędzia wiersza poleceń LDAP do „powiązania” go, a tym samym potwierdzenia, czy jest on aktywny. Możesz również powiązać jako użytkownik z wyższymi uprawnieniami, a następnie przejrzeć AD przy użyciu zasad LDAP.

Ale hej ... nic nie jest z Powershellem!

Gerard ONeill
źródło