Итак, давайте протестируем ADapter и заодно, на примере Object Pascal в IDE Lazarus, я покажу как обращаться к утилите и получать из неё вывод.
Тестовый проект будет максимально простой. На форме будет 10 контролов:
- TEdit (1 штука);
- TMemo (1 штука);
- TButton (8 штук).

Теперь напишем функцию проверки пустоты в TEdit (в проекте у контрола имя userlogin):
function emptyedit(test: string): boolean; begin if test='' then result:=false else result:=true; end;
Если данных нет и TEdit пуст — функция вернёт False, если данные есть — True.
Теперь можно браться за процедуру обращения к внешней утилите. Для начала рассмотрим обычное обращение без параметров запуска, чтобы можно было взаимодействовать с окном Active-Directory-Object-Picker.
procedure GetAllDataFromAD;
var
adapter: TProcess;
stringlist: TStringList;
error, notexe: string;
begin
main_form.memo.Clear;
error:='Произошла ошибка обращения к adapter.exe';
notexe:='Не найден файл adapter.exe!' + #13 + 'Скачать его можно отсюда: https://ngdream.ru/adapter';
if FileExists('adapter.exe') then
begin
try
adapter:=TProcess.Create(nil);
adapter.Executable:='adapter.exe';
adapter.Options:=adapter.Options + [poUsePipes, poWaitOnExit, poNoConsole];
adapter.Execute;
stringlist:=TStringList.Create;
stringlist.LoadFromStream(adapter.Output);
main_form.memo.Text:=(ConsoleToUTF8(stringlist.Text));
stringlist.Free;
adapter.Free;
except
main_form.memo.Text:=error;
end;
end
else main_form.memo.Text:=notexe;
end;
poNoConsole в adapter.Options никак не повлияет на вывод окна Active-Directory-Object-Picker, зато пользователь не увидит мрачное окно консоли и будет напрямую контактировать с окном выбора пользователя.

И, чтобы завершить картину, покажу процедуру для адресного обращения к утилите с параметрами запуска. Как раз для этой процедуры и нужна, упомянутая выше, функция проверки TEdit.
procedure GetDataFromAD(command: string; username: string);
var
prc: TProcess;
stringlist: TStringList;
error, empty, notexe: string;
begin
main_form.memo.Clear;
empty:='Необходимо задать логин пользователя';
error:='Произошла ошибка обращения к adapter.exe';
notexe:='Не найден файл adapter.exe' + #13 + 'Скачать его можно отсюда: https://ngdream.ru/adapter';
login:=main_form.userlogin.Text;
if FileExists('adapter.exe') then
begin
if emptyedit(login)=true then
begin
try
prc:=TProcess.Create(nil);
prc.Executable:='adapter.exe';
prc.Parameters.Add(command);
prc.Parameters.Add(username);
prc.Options:=prc.Options + [poUsePipes, poWaitOnExit, poNoConsole];
prc.Execute;
stringlist:=TStringList.Create;
stringlist.LoadFromStream(prc.Output);
main_form.memo.Text:=(ConsoleToUTF8(stringlist.Text));
stringlist.Free;
prc.Free;
except
main_form.memo.Text:=error;
end;
end
else main_form.memo.Text:=empty;
end
else main_form.memo.Text:=notexe;
end;
Данная процедура принимает данные в виде необходимого параметра запуска и содержимого нашего TEdit (если, разумеется, в нём есть данные).

Вызывать процедуру можно вот так:
procedure Tmain_form.getdisplaynameClick(Sender: TObject);
begin
GetAllDataFromAD; // Процедура получения общих данных пользователя
GetDataFromAD('-getname', userlogin.Text); // Процедура получения конкретных данных пользователя
end;
Вот таким методом можно получать данные о пользователе из Active Directory с помощью консольной утилиты ADapter.
Посмотреть весь код и взглянуть на работу тестовой программы можно вот по этой ссылке: