是否有Windows命令行实用程序来验证用户凭据?


19

在Windows平台上,没有任何命令行工具,我可以通过一个usernamepassword domain name为了验证凭据(或可能给出错误的帐户被停用,不存在或已过期)?


2
为什么需要验证除您自己之外的任何人的凭据。作为负责任且受人尊敬的SysAd,您无需知道其他任何人的凭据(也许root或Domain Admin帐户除外)。
gWaldo

6
@gWaldo:我是作为一名软件工程师来到这里的,他正在编写一个安装程序,要求用户提供现有计算机帐户的凭据,然后我们将其存储(加密)以进行代码级Win32 API模拟调用。我发现此问题和答案相关且有用,而且是合法的。
Mike Atlas

1
我为用户设置了默认密码,并指示他们进行更改。现在几周后,我想知道谁拥有和谁没有。
马克·贝里

@MarkBerry,您应该只勾选用户配置文件中的复选框,以迫使他们在下次登录时更改其密码。
克雷格

2
@Craig,即使我强迫他们在登录时更改密码,也仍然不能保证他们已经在一周或一个月后登录;我需要一种从命令行检查的方法。如果启用了网络级别身份验证,则强制更改密码甚至可以锁定远程用户。有时,公司(客户)需要比强制更改密码更柔和的触感。
马克·贝里

Answers:


14

您可以使用该net use命令,在命令行上指定用户名和密码(在表单中,net use \\unc\path /user:username password然后检查errorlevel返回的内容以验证凭据是否有效。

runas命令也将起作用,除了您将花费更多的时间测试输出。

测试帐户是否存在的凭据将是使用net user还是的问题dsquery。该net user命令不会告诉您帐户是否被锁定,但是查询lockoutTime用户帐户的属性可以告诉您。


7
runas /user:username cmd将会打开一个新的命令行窗口,username就像您提供了有效的密码一样,该用户可以登录到此计算机。我通常会打开一个外壳,根据我可以查询的个人信息来测试密码是否仍然是默认密码。
PsychoData

13

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

参考:https : //stackoverflow.com/questions/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命令行工具对其进行“绑定”,从而确认它是否处于活动状态。您还可以以具有较高特权的用户身份绑定,然后使用LDAP原理锁定AD。

但是,嘿-Powershell没错!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.