มียูทิลิตีบรรทัดคำสั่งของ Windows เพื่อตรวจสอบข้อมูลรับรองผู้ใช้หรือไม่


19

บนแพลตฟอร์ม Windows จะมีอรรถประโยชน์บรรทัดคำสั่งใด ๆ ที่ฉันสามารถผ่านการusername, password domain nameเพื่อที่จะตรวจสอบข้อมูลประจำตัว (หรืออาจจะให้ข้อผิดพลาดว่าบัญชีถูกปิดใช้งานไม่ได้อยู่หรือหมดอายุ)?


2
ทำไมคุณต้องยืนยันข้อมูลประจำตัวของใครก็ได้ยกเว้นของคุณเอง ในฐานะที่เป็น SysAd ที่มีความรับผิดชอบและน่านับถือคุณไม่จำเป็นต้องรู้ข้อมูลประจำตัวของผู้อื่น (ยกเว้นอาจเป็นบัญชีรูทหรือบัญชีผู้ดูแลระบบโดเมน)
gWaldo

6
@ gWaldo: ฉันมาที่นี่ในฐานะวิศวกรซอฟต์แวร์ที่กำลังเขียนโปรแกรมติดตั้งซึ่งขอให้ผู้ใช้รับข้อมูลประจำตัวของบัญชีเครื่องที่มีอยู่ซึ่งต่อมาเราจะจัดเก็บ (เข้ารหัส) สำหรับการโทรเลียนแบบ Win32 API ในระดับรหัส ฉันพบคำถามและคำตอบที่เกี่ยวข้องและเป็นประโยชน์เช่นเดียวกับที่ถูกต้อง
Mike Atlas

1
ฉันตั้งค่าผู้ใช้ด้วยรหัสผ่านเริ่มต้นและสั่งให้พวกเขาเปลี่ยน สองสามสัปดาห์ต่อมาฉันต้องการรู้ว่าใครมีและใครยังไม่ได้
Mark Berry

@Markberry คุณควรทำเครื่องหมายที่ช่องในโปรไฟล์ผู้ใช้เพื่อบังคับให้พวกเขาเปลี่ยนรหัสผ่านในการเข้าสู่ระบบครั้งต่อไป
Craig

2
@Craig แม้ว่าฉันจะบังคับให้พวกเขาเปลี่ยนรหัสผ่านของพวกเขาที่เข้าสู่ระบบที่ยังไม่รับประกันว่าพวกเขาได้เข้าสู่ระบบในสัปดาห์หรือเดือนต่อมา; ฉันต้องการวิธีตรวจสอบจากบรรทัดคำสั่ง การเปลี่ยนรหัสผ่านที่บังคับใช้สามารถล็อคผู้ใช้ระยะไกลได้หากเปิดใช้งานการรับรองความถูกต้องระดับเครือข่าย และบางครั้ง บริษัท (ลูกค้า) ต้องการการสัมผัสที่นุ่มนวลกว่าการบังคับให้เปลี่ยนรหัสผ่าน
Mark Berry

คำตอบ:


14

คุณสามารถใช้net useคำสั่งระบุชื่อผู้ใช้และรหัสผ่านในบรรทัดคำสั่ง (ในแบบฟอร์มnet use \\unc\path /user:username passwordและตรวจสอบการerrorlevelส่งคืนเพื่อตรวจสอบว่าข้อมูลประจำตัวที่ถูกต้อง

runasคำสั่งจะทำงานมากเกินไปยกเว้นว่าคุณกำลังจะมีช่วงเวลาที่ยากการทดสอบการส่งออก

การทดสอบการรับรองสำหรับการดำรงอยู่ของบัญชีจะเป็นเรื่องของการใช้หรือnet user คำสั่งจะไม่บอกคุณว่าบัญชีถูกล็อคออก แต่สอบถามแอตทริบิวต์ของบัญชีผู้ใช้สามารถบอกคุณได้ว่าdsquerynet userlockoutTime


7
runas /user:username cmdจะเปิดหน้าต่างบรรทัดคำสั่งใหม่ราวกับusernameว่าคุณระบุรหัสผ่านที่ถูกต้องและผู้ใช้นั้นสามารถเข้าสู่ระบบคอมพิวเตอร์นี้ได้ ฉันมักจะเปิดเปลือกเพื่อทดสอบว่ารหัสผ่านยังคงเป็นค่าเริ่มต้นตามข้อมูลส่วนบุคคลของพวกเขาที่ฉันสามารถค้นหา
PsychoData

13

ในพาวเวอร์เชล:

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

การอ้างอิง: /programming/7663219/how-to-authenticate-an-user-in-activedirectory-with-powershell


ฉันมาObjectNotFound: (Test-ADAuthentication:String) [], CommandNotFoundExceptionที่นี่ สิ่งนี้ใช้งานได้กับตัวควบคุมโดเมนเท่านั้นหรือไม่สำหรับบัญชีท้องถิ่น
SaAtomic

1
@SaAtomic คุณจำเป็นต้องกำหนดฟังก์ชั่นในเซสชั่นของคุณก่อนที่จะใช้มัน Test-ADAuthenticationไม่ได้ถูกสร้างไว้ใน PowerShell
Kolob Canyon

1
สิ่งหนึ่งที่ฉันไม่ชอบเกี่ยวกับคำตอบของคุณคือคุณไม่ได้อ่านรหัสผ่านเป็นสตริงที่ปลอดภัย รหัสผ่านข้อความล้วนเป็นความคิดที่ดีเสมอ $pass = Read-Host -assecurestring 'Enter password'
Kolob Canyon

1

เพิ่งต้องการที่จะเพิ่มเนื่องจาก AD เป็นเซิร์ฟเวอร์ LDAP คุณสามารถใช้เครื่องมือบรรทัดคำสั่ง LDAP เพื่อ 'ผูก' เพื่อยืนยันว่ามันมีการใช้งานหรือไม่ นอกจากนี้คุณยังสามารถผูกในฐานะผู้ใช้ที่มีสิทธิ์สูงกว่าแล้วค้นหา AD โดยใช้หลักการ LDAP

แต่เดี๋ยวก่อน - ไม่มีอะไรผิดปกติกับ Powershell!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.