Вы упоминаете AD и Exchange, но все же оставляете вопрос неопределенным в отношении того, что конкретно вы запрашиваете и которые являются «стандартными» атрибутами. Я предполагаю, что вы, вероятно, имеете в виду атрибуты пользователя AD, но предложение ниже является более обобщенным.
Вы можете выбрать список атрибутов (свойств), которые вы хотите получить из объекта, поместив эти свойства в массив и используя Select-Object
. В этом примере вы сделать нужно знать заранее, какие свойства будут многозначное:
# Create an object with regular and multi-valued properties. In your
# case I guess this will come from a Get-*User cmdlet or similar.
$test = New-Object -TypeName PSOBject -Property @{"one"=1;"two"=2;"multi"[email protected]("a","b")}
# Define the list of properties you want to return from this object.
# In this list we include a calculated column to pull the multi-valued
# data out and -join it with the '%' character
$properties = @('one','two',@{Label="multi";Expression={($_.multi) -join "%"}})
# Now we pipe our object through Select-Object to pull out those
# properties we want, including the calculated one:
$test | Select-Object $Properties
one two multi
--- --- -----
1 2 a%b
Обратите внимание, что имя (Label) вычисленного собственности может быть все, что вы хотите; Я использовал то же имя, что и исходное свойство.
Edit: Следующий код работает для $ тест объекта выше, превращая его в новый объект, где многозначное поле представляет собой одну строку с «%», соединяющую первоначальные элементы массива. Обратите внимание, что это не использует подготовленные выражения для преобразования свойства multi; вместо этого он использует переключатель -ExpandProperty
в Select-Object
, чтобы выполнить работу «на лету».
$ConvertedProperties = @{}
foreach($Property in ($test | Get-Member -MemberType Properties)){
$Value = (Select-Object -InputObject $test -ExpandProperty $Property.Name) -join "%"
$ConvertedProperties.($Property.Name) = $Value
}
$ConvertedObject = New-Object -TypeName PSOBject -Property $ConvertedProperties
$ConvertedObject | Export-Csv filename.csv -NoTypeInformation
Вот сценарий, с которым я пошел. Я просто хочу, чтобы я мог взять объект объявления и автоматически определять типы свойств и выводить или присоединяться к многозначным элементам с разделителем в CSV. – MarkL
Я предполагаю, что определение типов свойств может быть одноразовым упражнением, поскольку существует конечный список, но я понимаю, как было бы хорошо найти решение, которое делает это в общем случае. Подумаешь. –
Я обновил свой ответ на примере, который работает для моего простого тестового объекта. Я надеюсь, что это имеет смысл и приближает вас к чему-то, что работает с вашим Active Directory. –