Есть ли способ зациклить ввод, пока dsquery не будет успешным? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь найти способ для моего командного файла повторить вопрос, если dsget не выполнен.

Это то, что у меня сейчас есть:

@echo off
set /p input="Enter AD Username to lookup: "
dsquery user -samid %input% |dsget user -memberof |dsget group -samid |find /v "samid"|findstr /v "dsget%" | clip | echo User found & echo.Groups copied to clipboard
pause

Копируетгруппа активных каталогов пользователей попадает в буфер обмена, но если она не удалась, вам необходимо повторно открыть командный файл, чего я не хочу.

В основном, если запрос не удается найти пользователя, которого я хочупроизнесите что-то вроде

User not found
Enter an AD Username to lookup:

и только в случае успешного завершения обрежет содержимое dsquery

1 Ответ

0 голосов
/ 03 апреля 2019

У меня нет dsquery или dsget, поэтому я не могу это проверить.

См. однострочное условное выполнение в windows1 . однострочное условное выполнение в windows2

command1 && command2 || command3

Выполнение команды2 только в том случае, если команда1 выполнена успешно.Выполните команду 3, если команда 1 не выполнена.

если% errorlevel% neq 0

@echo off
:loop 
set /p input="Enter AD Username to lookup: "
REM Since I can't test it this is a 51/49 guess
REM MAYBE?
dsquery user -samid %input% | dsget user -memberof | dsget group -samid  | FIND /i "dsget failed" > NUL && goto :loop || clip
REM dsquery user -samid %input% | dsget user -memberof | dsget group -samid | FINDSTR /i /c:"dsget failed">NUL | clip
REM IF %ERRORLEVEL% NEQ 0 goto :loop
echo User found. Groups copied to clipboard.
pause 
exit
...