Pull to refresh

Comments 4

Не смотря на всю мощь скриптовых языков, для подобных утилитарных задач предпочитаю использовать всё же не Powershell, и даже не VBScript, а простые узкоспециализированные консольные утилиты.
В частности для данной задачи я бы выбрал виндовую утилиту dsquery:

dsquery * -filter (sidHistory=S-1-5-21-1234567890-123456789-987654321-12345)

Если надо для списка из файла, то организовал бы простой цикл в батнике:

for /f %%i in (filename.txt) do (
...
)


В подобном альтернативном решении я вижу следующие плюсы:
1. Синтаксис простой и даже очевидный (и для написания, и для понимания, и для последующей модификации).
2. Написать такую команду в разы быстрее, чем ваш скрипт.
3. Работать это будет на Windows почти любой версии (от Win2k и выше точно).
4. Для работы этой команды не нужно устанавливать .NET Framework, Powershell и прочие тяжеловесные вещи.

Такой вот unix-way даже в администрировании windows-систем мне нравится больше, чем нагромождение длинных и неочевидных скриптов.
Основной темой данного скрипта был не поиск по известному значению SID, а взять все эти атрибуты из пользователя.

То есть на вход мы подаем пользователя, а не конкретный sID.

Если раскручивать тему *.CMD, то синтаксис будет еще более не очевиден, чем в моем примере.
> Основной темой данного скрипта был не поиск по известному значению SID,
> а взять все эти атрибуты из пользователя.
> То есть на вход мы подаем пользователя, а не конкретный sID.

Да это непринципиально. Я просто показал сам подход.
В одном домене выгрузил список пользователей с их атрибутом sid или sidhistory, в другом домене нашёл соответствующих пользователей по SID'у Это не сильно сложнее. Работа с атрибутами объектов в LDAP через консольные утилиты dsquery, dsget, dsmod, dsmove, dsadd, dsrm а также csvde и ldifde во многих случаях действительно проще, быстрее, очевиднее и нагляднее, чем многострочные PS/VBS-скрипты.

Я ещё понимаю, если бы вы на вход скрипта давали UNC-путь виндовой шары, а на выходе получали список пользователей и групп из всех имеющихся доменов с указанием прав доступа к дереву каталогов. Это действительно стоило бы заскриптовать. Я и сам что-то подобное писал ранее на VBScript. Однако для таких элементарных задач как поиск объекта в AD по атрибутам специальная узкоспециализированная консольная утилита действительно проще и удобнее, чем скрипт.
dsquery * «OU=OU,DC=DC,DC=ru» -filter "(sAMAccountName=SAM)" -attr sAMAccountName sIDHistory -limit 0
sAMAccountName sIDHistory
SAM S-1-5-21-0000000000-000000000-000000000-00000

В этом что-то есть, однако годного решения как это использовать в скрипте…

Я думаю, что критические к скорости части, можно переписать с командлетов powershell на использование утилит, однако обработку вести придется в powershell, иначе интегрировать нормально не получится на более высокие уровни.

И кстати, если интересно могу написать забор пользователей по UNC, c поиском по sIDHistory.
Sign up to leave a comment.

Articles