Использование отображаемых имен в txt файле для получения имен Samaccountname - PullRequest
1 голос
/ 01 августа 2020

Хорошо, у меня другая проблема, вероятно, связанная с невозможностью правильно хранить значения. Первоначальная идея заключалась в том, чтобы получить список пользователей и разделить их имена на два значения - givenName и sn, чтобы командлет Get-ADUser мог использовать их с помощью опции -Filter.

Хотя идея была отличной и решена, я, возможно, упустил из виду тот факт, что когда у людей есть 2 имени или фамилии, это не вариант, поскольку вы не можете легко предсказать это в коде. Другой вариант, который я нашел, - это атрибут displayName. Поскольку наши displayNames равны полному имени пользователя, это был бы самый простой вариант. Однако я не могу успешно сохранить значения из txt файла в переменной, чтобы он работал.

Мой код сейчас выглядит так:

Import-Csv -Path C:\temp\users.txt -header "displayName" |

ForEach-Object{ Get-ADUser -Filter "displayName -like '$($_.displayName)'" -Properties givenName, Surname, SamAccountName 
} |
Select-Object givenName, Surname, SamAccountName | 
Export-CSV C:\Temp\usersexport.csv -NoTypeInformation -Encoding UTF8
  1. В txt файле есть структура вроде такой:
John Smith Jones
Paula Ridley
Veronica Anne Downing
etc...

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

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

В приведенном выше коде я удалил переменную, которая использовалась для хранения значений, поскольку не было изменений, даже если она была там.

У меня также есть попытался указать -Delimiter "` n ", чтобы указать разделение значений внутри txt файла на новой каждой строке, но либо я не использовал символ записи, либо это не работает. РЕДАКТИРОВАТЬ:

Проблема, которая возникает после запуска моего кода, заключается в том, что мой экспортированный файл CSV имеет только следующую запись: . Я понятия не имею, почему, если честно, и это не меняется ни на что, но, как я уже сказал, вполне возможно, что формат, в котором имена внутри txt файла, неверен.

Если я правильно понимаю , -Filter в любом случае запускает заданное значение в строку, поэтому я полагаю, что проблема с именами файлов txt, которые не были специально сформированы перед руками, не является причиной этого.

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

РЕДАКТИРОВАТЬ: Хотите верьте, хотите нет, но самая безумно глупая вещь из всех - тот факт, что у displayName не было символа "" между отдельными значениями в моем txt файле, а вместо этого было пространство TAB, из-за того, что я импортировал свои displayNames из таблицу Excel и вручную объединили их. Я серьезно подумываю нанять психоаналитика, потому что потратил 5 часов и не заметил этого.

Спасибо вам обоим, @Laage и @ mklement0 за ваши усилия!

0 голосов
/ 01 августа 2020

Если каждая строка в файле представляет собой просто имя, вам лучше просто выполнить Get-Content, а не Import-Csv для файла.

Проблема с тем, что его не подхватывает Foreach-Object l oop заключается в том, что вы не подключаете l oop к первой строке вашего скрипта, поэтому переменная конвейера $_ не заполняется.

Если вы wi sh до go с Import-Csv, вам нужно реорганизовать его с помощью конвейера, например:

Import-Csv -Path 'C:\temp\users.txt' -header "displayName" | ForEach-Object{ Get-ADUser -Filter 'displayName -like "$($_.displayName)"' -Properties givenName, Surname, SamAccountName }

Как я уже сказал, вы также можете использовать Get-Content, например:

Get-Content -Path 'C:\temp\users.txt' | ForEach-Object{ Get-ADUser -Filter 'displayName -like "$_"' -Properties givenName, Surname, SamAccountName }

Или:

$DNames = Get-Content -Path 'C:\temp\users.txt' 
ForEach ($DName in $Dnames){ 
Get-ADUser -Filter 'displayName -like "$Dname"' -Properties givenName, Surname, SamAccountName 
}

Помните, что расширение переменных происходит только в двойных кавычках, а не в одинарных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...