Apakah ada utilitas baris perintah Windows untuk memverifikasi kredensial pengguna?

19

Pada platform Windows, apakah ada utilitas baris perintah yang dapat saya lewati username, password domain nameuntuk memverifikasi kredensial (atau mungkin memberikan kesalahan bahwa akun dinonaktifkan, tidak ada, atau kedaluwarsa)?

wiki
sumber
2
Mengapa Anda perlu memverifikasi kredensial siapa pun selain milik Anda. Sebagai SysAd yang bertanggung jawab dan terhormat, Anda tidak perlu tahu kredensial orang lain (kecuali mungkin root atau akun Domain Admin).
gWaldo
6
@ gWaldo: Saya datang ke sini sebagai insinyur perangkat lunak yang sedang menulis program pemasang yang meminta kredensial akun mesin yang ada kepada pengguna, yang kemudian kami simpan (dienkripsi) untuk panggilan peniruan API tingkat Win32 API. Saya menemukan pertanyaan dan jawaban ini relevan dan bermanfaat, juga sah.
Mike Atlas
1
Saya mengatur pengguna dengan kata sandi default dan menginstruksikan mereka untuk mengubahnya. Sekarang beberapa minggu kemudian, saya ingin tahu siapa yang punya dan siapa yang belum.
Mark Berry
@MarkBerry Anda cukup mencentang kotak centang di profil pengguna yang memaksa mereka untuk mengubah kata sandi mereka pada login berikutnya.
Craig
2
@Craig, bahkan jika saya memaksa mereka untuk mengubah kata sandi saat login, itu masih tidak menjamin bahwa mereka telah login seminggu atau sebulan kemudian; Saya perlu cara untuk memeriksa dari baris perintah. Perubahan kata sandi paksa bahkan dapat mengunci pengguna jarak jauh jika Otentikasi Tingkat Jaringan diaktifkan. Dan terkadang, perusahaan (pelanggan) membutuhkan sentuhan yang lebih lembut daripada memaksakan perubahan kata sandi.
Mark Berry

Jawaban:

14

Anda dapat menggunakan net useperintah, menentukan nama pengguna dan kata sandi pada baris perintah (dalam formulir net use \\unc\path /user:username passworddan memeriksa errorlevelkembali untuk memverifikasi apakah kredensial valid.

The runasperintah akan bekerja, juga, kecuali bahwa Anda akan memiliki lebih keras saat menguji output.

Menguji kredensial untuk keberadaan akun akan menjadi masalah menggunakan net useratau dsquery. The net userperintah tidak akan memberitahu Anda jika akun terkunci, tapi query lockoutTimeatribut dari account pengguna bisa memberitahu Anda bahwa.

Evan Anderson
sumber
7
runas /user:username cmdakan membuka jendela baris perintah baru seolah- usernameolah Anda memberikan kata sandi yang valid dan pengguna itu dapat masuk ke komputer ini. Saya biasanya akan membuka shell untuk menguji bahwa kata sandi masih default berdasarkan info pribadi mereka yang bisa saya cari.
PsychoData
13

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

Referensi: /programming/7663219/how-to-authenticate-an-user-in-actived directory-with-powershell

pengguna224310
sumber
Saya akan di ObjectNotFound: (Test-ADAuthentication:String) [], CommandNotFoundExceptionsini. Apakah ini hanya berfungsi pada pengontrol domain dan tidak untuk akun lokal?
SaAtomic
1
@SaAtomic Anda perlu menentukan fungsi di sesi Anda sebelum menjalankannya. Test-ADAuthenticationtidak dibangun ke PowerShell
Kolob Canyon
1
Satu hal yang saya benar-benar tidak suka tentang jawaban Anda adalah Anda tidak membaca kata sandi sebagai string yang aman. Kata sandi teks biasa selalu merupakan ide yang buruk. $pass = Read-Host -assecurestring 'Enter password'
Ngarai Kolob
1

Hanya ingin menambahkan bahwa karena AD adalah server LDAP, Anda dapat menggunakan alat baris perintah LDAP untuk 'mengikatnya', sehingga mengonfirmasi apakah itu aktif atau tidak. Anda juga dapat mengikat sebagai pengguna dengan hak istimewa lebih tinggi dan kemudian mencari AD menggunakan prinsip-prinsip LDAP.

Tapi hei - tidak ada yang salah dengan Powershell!

Gerard ONeill
sumber