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

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

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

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

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

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 ..

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

Другие вопросы по тегам