Как расширить (сгладить) строку в таблице данных, которая в одном из столбцов содержит массив?

есть ли способ расширить/сгладить строку в datatable? У меня есть данные в переменной $table, которая имеет 2 столбца. В первых столбцах хранится значение [string], а во втором столбце хранится значение массива [string[]], которое содержит не менее 2 значений. Вот пример одной такой строки:

DistinguishedName                       GroupNames
-----------------                       ----------
Applications/FarmName/Notepad           {Domain\Group1, Domain\Group2}

Я хотел бы, чтобы он был сглажен и экспортирован, например. Формат CSV, в то время как первый столбец сохраняет «ключевое значение» DistinguishedName, а все остальные столбцы заполняются конкретным значением, расширенным из столбца GroupNames. Ниже приведен пример желаемого результата:

Applications/FarmName/Notepad; Domain\Group1; Domain\Group2

person evianton    schedule 02.05.2012    source источник
comment
Как получить строку [] в DataColumn? Согласно этой ссылке поддерживается только массив Byte. msdn.microsoft.com/en-us/library/   -  person paparazzo    schedule 02.05.2012


Ответы (1)


Если вы намерены экспортировать в csv, возможным решением может быть создание собственного PSObject и динамическое заполнение его свойств.

Что-то вроде этого:

$expandedObjects = @()
$table | % {
    #assuming $_ reffers to actual row

    $obj = new-object PSObject
    $obj | Add-Member -MemberType NoteProperty -Name "DistinguishedName" -Value $_.DistinguishedName

    $i = 0 # for dynamic property naming
    $_.GroupNames | % {
        # assuming $_ reffers to actual GroupName value
        $obj | Add-Member -MemberType NoteProperty -Name $("GroupName{0}" -f $i++) -Value $_
    }
    $expandedObjects += $obj
}
$expandedObjects | export-csv ..

Я не проверял код, поэтому могут быть ошибки. Также я не знаю, какой именно тип у вашей $table veriable. Но идея должна быть ясной.

person jumbo    schedule 02.05.2012
comment
Скрипт нужно немного подправить, пока скриптблок не оценивается. {GroupName{0} -f $i++} следует заменить на $(GroupName{0} -f $i++). - person evianton; 02.05.2012