2016-03-03 2 views
0

Я использую PowerShell в основном для работы с Active Directory и MS Exchange.Необходимый скрипт для обнаружения свойств объекта - MultiValue

Пример: использовать соединение для представления объектов MultiValue, однако, кажется, громоздко иметь эти строки в скрипте. Мне нужен сценарий, который будет сообщать обо всех объектах и ​​давать стандартные атрибуты и обнаруживать многозначные свойства и экспортировать их с символом объединения «%».

ответ

0

Вы упоминаете 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 
+0

Вот сценарий, с которым я пошел. Я просто хочу, чтобы я мог взять объект объявления и автоматически определять типы свойств и выводить или присоединяться к многозначным элементам с разделителем в CSV. – MarkL

+0

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

+0

Я обновил свой ответ на примере, который работает для моего простого тестового объекта. Я надеюсь, что это имеет смысл и приближает вас к чему-то, что работает с вашим Active Directory. –

Смежные вопросы