Как вывести неровные значения noteproperty с помощью Export-CSV PowerShell - PullRequest
0 голосов
/ 18 мая 2018

Я написал функцию, которая анализирует имена папок для файлов и сохраняет их как свойства заметок для каждой отдельной встреченной папки, поэтому directory (n) = direcory1, directoryn + 1 = directory2 и т. Д. Так что для каждого файла каталог(s) будет различной длины в зависимости от того, где файл находится в структуре каталогов.

Проблема, с которой я сталкиваюсь, заключается в том, как выводить зубчатые результаты каталогов в формате столбца с использованием Export-csv в сочетании с другими значениями статических свойств, так как длина свойства noteproperty будет варьироваться от файла к файлу (Jagged).выяснить логику, чтобы попытаться вывести в формате csv каталог в формате столбца.Выходные данные должны иметь следующие заголовки:

Файл примера 1
Каталог 1, Каталог 2, Каталог 3, Другие свойства
Значение каталога 1, Значение каталога 2, Значение каталога 3

Файл2
Каталог 1, Каталог 2, Каталог 3, Каталог 4
Значение каталога 1, Значение каталога 2, Каталог 3, Каталог 4

function Get-Folder ($Files)
{

foreach ($file in $Files)
{
    $TotalDirLvl = ($file.FullName.Split('\').count)-1

    $x =0

    While($x -lt $TotalDirLvl){
        $file|Add-Member -NotePropertyName Directory$x -NotepropertyValue 
        $file.FullName.Split('\')[$x]
        $x++
    }
}
Return $Files

}

1 Ответ

0 голосов
/ 19 мая 2018

Вам нужно знать, сколько каталогов будет в дереве, которое вы экспортируете, чтобы вы могли создать правильное количество свойств для вашего объекта, которое вы Export-CSV или ваш CSV-файл не будете иметь свойства "справа" отПервый ряд.Файл IE 2 в вашем примере будет иметь Directory 1..3, но не 4. Способ, которым я это сделал, состоит в том, чтобы зациклить файлы дважды.Первый раз получает максимальную глубину, которую вы пройдете, а второй раз создает psobject и добавляет его в массив для записи в файл csv в конце.

Для файлов, которые имеют меньше сегментов пути, чем ваш максимальный сегмент пути, вам нужно указать пустое или нулевое значение для сегментов, которые не заполнены.Кроме того, если вы хотите включить другие свойства, вы, вероятно, должны сделать это слева от этого дерева каталогов.Если вам не нужно свойство для данного файла, вам все равно нужно передать нулевое / пустое значение в свойство вашего объекта или иначе.

Сценарий ниже создает файл csv, например: enter image description here из структуры каталогов, которую вы объясняете в своем посте.

$files = Get-ChildItem -Path "$env:temp\SO" -Recurse | where { ! $_.PSIsContainer }
$outObjs = @()
$maxDepth = 0
foreach ($file in $files) { 
    $TotalDirLvl = ($file.FullName.Split('\').count)-1
    if ($TotalDirLvl -gt $maxDepth){
        $maxDepth = $TotalDirLvl
    }
}
foreach($file in $files){
    $outObj = New-Object PSObject
    $fileDepth = ($file.FullName.Split('\').count)-1
    $outObj | Add-Member -NotePropertyName DirectoryDepth -NotepropertyValue $fileDepth
    $x = 0
    #Add other properties for each file here to the left of your directory tree
    While($x -le $maxDepth)
    {
        if ($x -gt $fileDepth){
            $value = ''
        }
        else{
            $value = $file.FullName.Split('\')[$x]
        }
        $outObj | Add-Member -NotePropertyName "Directory$x" -NotepropertyValue $value

        $x++
    }
    $outOBjs += $outObj
}

$outOBjs | Export-Csv -Path "$env:temp\SO\test.csv" -NoTypeInformation -Force 
...