On a Windows platform, is there any command line utility that I can pass a username
, password
domain name
to in order to verify the credentials (or possibly give an error that the account is disabled, doesn't exist or expired)?
-
2Why would you need to verify anyone's credentials but your own. As a responsible and respectable SysAd, you have no need to know anyone else's credentials (except perhaps root or the Domain Admin accounts).– gWaldoJul 23, 2012 at 10:34
-
10@gWaldo: I came here as a software engineer who is writing an installer program which asks a user for the credentials of an existing machine account, which we then subsequently store (encrypted) for code-level Win32 API impersonation calls. I found this question and answer relevant and useful, as well as legitimate.– Mike AtlasOct 10, 2012 at 13:44
-
2I set up users with a default password and instructed them to change it. Now a couple weeks later, I want to know who has and who hasn't.– Mark BerryOct 21, 2014 at 21:44
-
1@MarkBerry you should just tick the checkbox in the user profile forcing them to change their password on the next logon.– Craig TullisSep 25, 2015 at 8:24
-
4@Craig, even if I force them to change their password at login, that still doesn't guarantee that they have logged in a week or a month later; I need a way to check from the command line. Forced password change can even lock out remote users if Network Level Authentication is enabled. And sometimes, the company (customer) requires a softer touch than forcing a password change.– Mark BerrySep 25, 2015 at 22:13
6 Answers
You could use the net use
command, specifying the username and password on the command-line (in the form net use \\unc\path /user:username password
and check the errorlevel
returned to verify if a credential is valid.
The runas
command would work, too, except that you're going to have a tougher time testing the output.
Testing a credential for the existence of an account would be a matter of using net user
or dsquery
. The net user
command won't tell you if an account is locked out, but querying the lockoutTime
attribute of the user account could tell you that.
-
14
runas /user:username cmd
will open a new command line window asusername
if you provide the valid password and that user can login to this computer. I commonly will open a shell to test that the password is still the default based on their personal info that I can look up. Feb 10, 2015 at 21:41 -
For me multitime run command return 'Multiple connections to a server or shared resource by the same user' please call
net use /delete \\unc\path
before retry. Oct 5, 2020 at 7:11 -
I agree with the comment on Feb. 10, 2015 about using
runas /user:username cmd
. It works great for local accounts, I haven't tried it for domains. If the validation fails, it will usually give a good reason why, for example it might say: "The user's password must be changed before signing in."– Gen1-1Apr 14, 2022 at 15:55 -
net use \\unc\path /user:username password always return
System error 53 has occurred. The network path was not found.
with every username/password I type, event unreal user? Jul 6, 2022 at 9:55 -
@Gen1-1 The problem w/
runas
is that it doesn't accept input redirection so you can't use it in an unattended fashion. Nov 29, 2022 at 18:21
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:\>
-
I'm getting
ObjectNotFound: (Test-ADAuthentication:String) [], CommandNotFoundException
here. Does this exclusively work on a domain controller and not for local accounts?– SaAtomicJun 12, 2017 at 5:41 -
1@SaAtomic You need to define the function in your session before running it.
Test-ADAuthentication
is not built into powershell Sep 27, 2017 at 19:51 -
1One thing I really don't like about your answer is you don't read the password in as a secure string. Plain text passwords are always a bad idea.
$pass = Read-Host -assecurestring 'Enter password'
Sep 27, 2017 at 19:52 -
-
@Nick.McDermaid not sure what you mean. You open a PS window, copy/paste the code from "Function..." to the "...}" and hit enter. Then you can run "Test_ADAuthentication" commands, as shown. Feb 23 at 14:27
Try this:
net use \\%userdnsdomain% /user:%userdomain%\%username% *
%Errorlevel% is 0 if password is Ok.
Asterisk at the end of the sentence forces to ask for password.
cmdkey
is the cmd-line interface for adding, removing, listing credentials that are used for things like net use
or remote desktop
.
cmdkey /target <domain> /user:<username> /pass:<pass>
will add the credentials for a domain
Then using net use <domain UNC>
won't require the subsequent credential passage.
I believe it is named cmdkey
as it is command-line way of adding keys/credentials.
Further to PsychoData's comment above.
I need to test a service account which is part of a "no interaction" AD group that has been given access to a share that is not available from any VM that I can use to test. I had to use this syntax to confirm the password was correct;
runas /noprofile /netonly /user:domain\serviceaccount cmd
I can confirm that if the pwd is correct, this pops up a cmd window
Other syntaxes (including the NET USE syntax) gave me various ambigous results.
-
From testing this, it seems like you can enter the wrong password and a cmd window will still pop up– JimadineMar 15 at 9:20
-
-
Probably worse than useless. Misleading. I'd suggest deleting this answer before the downvotes descend.– JimadineMar 16 at 18:07
-
I don't mind the downvotes. I just want to know why I can open a CMD window with full rights with the wrong password. Mar 17 at 0:42
-
Don't think you'd get "full rights"- have a read of narkive.com/FMoOHWHl.2– JimadineMar 17 at 12:42
Just wanted to add that since AD is an LDAP server, you can use an LDAP command line tool to 'bind' to it, thus confirming whether or not it is active. You can also bind as a user with higher privileges and then seach AD using LDAP principles.
But hey-- nothing wrong with Powershell!