#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. Замечательно! Я провел несколько быстрых тестов, и, похоже, все готово. 🙂