Ошибка при отправке свойств в Get-ADUser? Сохранение в файл CSV (Powershell)

#windows #powershell #active-directory

#Windows #powershell #active-directory

Вопрос:

Вот очень упрощенная версия скрипта Powershell, которую я хотел бы использовать для возврата свойств ADUser (в формате CSV), таких как name, GivenName, Office и т. Д. Для пользователей в данном подразделении.

 [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')

$title = 'Get-ADUser Properties'
$msg   = 'Enter desired User properties, each seperated by a comma:'
$default = "name, office"
$propertiesSought = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title, $default)

get-aduser -filter * -properties * -searchbase $OU | select $propertiesSought | Export-Csv -Path "C:UsersAdministratorDesktoptemp.csv"

 

Скрипт предлагает пользователю ввести разделенные запятыми свойства в поле ввода, которое затем сохраняется как переменная. В сохраненном файле CSV все, что я вижу, это «Microsoft.ActiveDirectory.Management.ADPropertyValueCollection» для каждой из пользовательских данных, которые я ожидал увидеть…

Я попытался изолировать проблему настолько, насколько мог. Если отправленный текст состоит из одного слова, такого как «имя», тогда все в порядке. Если я добавлю что-нибудь еще, даже без пробелов, проблема вернется.

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

Исправление этого будет много значить для меня. Спасибо.

Ответ №1:

Я попытался изолировать проблему настолько, насколько мог. Если отправленный текст состоит из одного слова, такого как «имя», тогда все в порядке. Если я добавлю что-нибудь еще, даже без пробелов, проблема вернется.

Вы действительно близко!

Select-Object принимает массив имен свойств или выражений свойств — ни одной строки, разделенной запятыми.

Когда вы передаете строку "name,email,manager" в Select-Object , он начинает искать свойство с буквальным именем name,email,manager — как если бы вы пытались получить доступ $user."name,email,manager" .

Разделите строку на отдельные имена свойств, и она будет работать:

 # ...
$propertiesSought = [Microsoft.VisualBasic.Interaction]::InputBox($msg, $title, $default)

# Split input string
$propertiesSought = $propertiesSought -split ',s*'

Get-ADUser -Filter * -Properties $propertiesSought -searchbase $OU |Select $propertiesSought |Export-Csv ...
 

Комментарии:

1. Замечательно! Я провел несколько быстрых тестов, и, похоже, все готово. 🙂