Разбор объектов в PowerShell для создания объекта PSCustom - PullRequest
0 голосов
/ 18 мая 2018

Я написал функцию PowerShell, которая возвращает такие вещи (из $Objekt.Columns):

Пример 1:

Addr.BoNumber        Addr.FullName
-------------        -------------
{212, 210, 211, 104} {xy, cv, bn, mm}

Пример 2:

Addr.BoNumber        Addr.FullName
-------------        -------------
{212}                {xy}

Пример 3:

Addr.BoNumber        Addr.FullName     Addr.Email
-------------        -------------     ----------
{212, 210, 211, 104} {xy, cv, bn, mm}  {x, y, z, n}

Теперь я пытаюсь написать синтаксический анализатор, который изменяет эту структуру следующим образом:

Addr.BoNumber        Addr.FullName
-------------        -------------
212                  xy
210                  cv
211                  bn
104                  mm

Как видите, у меня есть один или несколькоСвойства и одно или несколько значений.Addr.BoNumber[0] принадлежит Addr.FullName[0], Addr.BoNumber[1] принадлежит Addr.FullName[1] и т. Д.

У меня есть следующая функция, которая должна его анализировать, но у меня возникают некоторые проблемы при сохранении значений из .Rows в PSCustomObject Свойства.

Это моя функция синтаксического анализа:

function New-OOPowerShellObject {

    Param ( 
        [Parameter( 
            Mandatory = $true, 
            Position = 0, 
            ValueFromPipeline = $true 
        )]
        [FlatResponseData]$Objekt 
    )

    # Return Objekt erstellen
    $ReturnObjekt = [PSCustomObject]@{}

    # Über Columns loopen und Titel eintragen
    $Objekt.Columns | % {
        Add-Member -InputObject $ReturnObjekt `
                   -NotePropertyName $_.Name `
                   -NotePropertyValue (foreach())
    }

    foreach($o in $Objekt.Columns)
    {
        $c = ($o.Rows.count) - 1
        0..$c | % {
            $ReturnObjekt."$($_.Name)" += $o.Rows[$_]
        }
    }

    # Return
    $ReturnObjekt
}

Но я получаю эту ошибку (на немецком языке):

Ausnahme beim Festlegen von "": "Das Argument kann nicht verarbeitet werden, da der Wert des Arguments "name" ungültig ist. Ändern Sie den Wert des Arguments "name", und führen Sie den Vorgang erneut aus."
In Zeile:26 Zeichen:30
+             $ReturnObjekt."$($_.Name)" += $o.Rows[$_]
+                              ~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], SetValueInvocationException
    + FullyQualifiedErrorId : ExceptionWhenSetting

Любые идеи?

РЕДАКТИРОВАТЬ: Дополнительная информация:

  • Все находится в: $Objekt.Columns
  • Названия свойств в: $Objekt.Columns.Name в виде строки
  • Значения свойствв: $Objekt.Columns.Rows в виде массива

1 Ответ

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

Вот как я это сделал:

function Format-OOFlatResponseData {

    Param ( 
        [Parameter( 
            Mandatory = $true, 
            Position = 0, 
            ValueFromPipeline = $true 
        )]
        [FlatResponseData]$Objekt 
    )
    # Process für Pipeline Input
    Process {

        # Über Rows loopen
        $RowCount = $Objekt.RowCount
        $Return = 0..($RowCount - 1) | foreach {

            # PSCustomObject erstellen
            $PSCust = [PSCustomObject]@{}
            foreach($C in $Objekt.Columns)
            {
                # Values zu PSCustomObject
                Add-Member -InputObject $PSCust `
                            -NotePropertyName $C.Name `
                            -NotePropertyValue $C.Rows[$_]
            }

            # Return PSCustomObject in Return Var
            $PSCust
        }

        # Return alles
        $Return
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...