Существует ли утилита командной строки Windows для проверки учетных данных пользователя?

19

На платформе Windows, есть ли какая-либо утилита командной строки, которую я могу передать username, password domain nameчтобы проверить учетные данные (или, возможно, выдать ошибку, что учетная запись отключена, не существует или просрочена)?

вики
источник
2
Зачем вам нужно проверять чьи-либо учетные данные, кроме ваших собственных. Как ответственный и уважаемый SysAd, вам не нужно знать чьи-либо учетные данные (кроме, возможно, учетных записей root или администратора домена).
gWaldo
6
@gWaldo: Я пришел сюда как инженер-программист, который пишет программу установки, которая запрашивает у пользователя учетные данные существующей учетной записи компьютера, которые мы впоследствии сохраняем (зашифровываем) для вызовов олицетворения Win32 API на уровне кода. Я нашел этот вопрос и ответ актуальным и полезным, а также законным.
Майк Атлас
1
Я настроил пользователей с паролем по умолчанию и поручил им изменить его. Теперь, пару недель спустя, я хочу знать, кто имеет, а кто нет.
Марк Берри
@MarkBerry вам нужно просто поставить галочку в профиле пользователя, заставляя их сменить пароль при следующем входе в систему.
Крейг
2
@Craig, даже если я заставлю их сменить пароль при входе в систему, это еще не гарантирует, что они вошли в систему через неделю или месяц спустя; Мне нужен способ проверить из командной строки. Принудительная смена пароля может даже заблокировать удаленных пользователей, если включена аутентификация на уровне сети. И иногда компании (клиенту) требуется более мягкое касание, чем принудительное изменение пароля.
Марк Берри

Ответы:

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

Ссылка: /programming/7663219/how-to-authenticate-an-user-in-activedirectory-with-powershell

user224310
источник
Я добираюсь ObjectNotFound: (Test-ADAuthentication:String) [], CommandNotFoundExceptionсюда. Это работает исключительно на контроллере домена, а не для локальных учетных записей?
SaAtomic
1
@SaAtomic Вам нужно определить функцию в вашем сеансе перед ее запуском. Test-ADAuthenticationне встроено в PowerShell
Каньон Колоб
1
Что мне действительно не нравится в вашем ответе, так это то, что вы не читаете пароль как безопасную строку. Обычные текстовые пароли всегда плохая идея. $pass = Read-Host -assecurestring 'Enter password'
Каньон Колоб
1

Просто хотел добавить, что, поскольку AD является сервером LDAP, вы можете использовать инструмент командной строки LDAP для «привязки» к нему, таким образом подтверждая, активен он или нет. Вы также можете связываться как пользователь с более высокими привилегиями, а затем выполнять поиск AD, используя принципы LDAP.

Но эй, с Powershell все в порядке!

Жерар ОНЕЙЛ
источник