Как написать сценарий Powershell с For-l oop, используя список пользователей для распечатки информации Active Directory - PullRequest
0 голосов
/ 14 июля 2020

Итак, у меня есть список пользователей, которых мне нужно проверить с помощью инструментов RSAT и модуля GetAD-User в Powershell. В результате я определил, что следующая команда будет извлекать информацию о пользователе, и я передаю другой файл пользователям, нуждающимся в проверке. Следующая команда будет работать и предоставит мне информацию о пользователе и посмотреть, существует ли адрес электронной почты:

Get-ADUser -filter * -properties EmailAddress -SearchBase 'DC=xxx-xxxx,DC=xxx,DC=xx,DC=us'| select-object Name, EmailAddress | select-string 'doe,john'

Поэтому я попробовал al oop, используя следующее:

cat .\PD.txt | ForEach-Object {Get-ADUser -filter * -properties EmailAddress -SearchBase 'DC=xx-xxxx,DC=xxx,DC=xx,DC=us'| select-object Name, EmailAddress | select-string '$_'}

** У меня есть пропустил часть информации D C с точки зрения имен AD по соображениям безопасности.

Внутри PD.txt у меня было бы что-то вроде текстовых файлов с именами пользователей в Lastname, Firstname на строку. Однако с точки зрения информации ничего не выводится. Если бы я сделал это без «$ _» и команды forEach-Object, он бы работал, но ничего не печатает. Неправильно ли мой forl oop?

Я попробовал по-другому, но он все еще не работал, используя апострофы для передачи строки другим способом, записывая его в файл users.txt с именем Real.txt. Хотя я могу пропустить oop через него, это не работает, когда я ввожу команду GetAD-User. Однако я думаю, что в моем for-l oop может быть что-то не так, хотя я не уверен, что это такое.

PS C:\Users\richard.barrett\Git> cat .\Real.txt | ForEach-Object {echo $_}
'Doe, John'
'Doe, Jane'

Сравнительный For-L oop:

PS C:\Users\richard.barrett\Git> cat .\Real.txt | ForEach-Object {Get-ADUser -filter * -properties EmailAddress -SearchBase 'DC=xx-xxxx,DC=xxx,DC=xx,DC=us'| select-object Name, EmailAddress | select-string $_}

1 Ответ

0 голосов
/ 14 июля 2020

Итак, я обнаружил проблему с моей проблемой. Я неправильно передавал переменную в строку выбора в конце. Поскольку я беру это из файла .txt, я решил установить переменную, а для go - для l oop просто вызвать список непосредственно над файлом вместо повторения команды Get-ADUser для каждого пользователя. ..очень медленно. В результате у меня сработало следующее:

echo "Users for AD Verification" ; 
echo "============ LIST ============" ; 
cat .\PD.txt | ForEach-Object {echo $_} ; 
echo "============ END LIST ========" ;
echo "Executing Active Directory Verification" ; 
echo "============ PROCESS =========" ;
$list = cat .\PD.txt; 
Get-ADUser -filter * -properties EmailAddress -SearchBase 'DC=del-valle,DC=k12,DC=tx,DC=us'| select-object Name, EmailAddress | select-string $list
echo "============ END PROCESS =====" ;

Это дало мне список, который был определен в .\PD.txt.

Несмотря на мои первоначальные колебания, я включил свое подразделение Identity OU чтобы пользователи понимали, где должны быть подразделения go в команде для извлечения пользователей и их учетных записей электронной почты в AD.

Надеюсь, это поможет кому-то другому, меня часто просят проверить пользователей в моем Active Directory.

Я забыл добавить, но первоначальная проблема заключалась в том, как я помещал переменную в select-string, мне не следовало использовать апострофы. Вот фактическая команда, которая также работает, но она немного длиннее, поскольку она выполняет итерацию и выполняет команду для каждой строки ... очень долго.

cat .\PD.txt | ForEach-Object {Get-ADUser -filter * -properties EmailAddress -SearchBase 'DC=del-valle,DC=k12,DC=tx,DC=us'| select-object Name, EmailAddress | select-string $_}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...