在PowerShell中解析对象以创建PSCustom对象

时间:2018-05-18 12:30:46

标签: powershell

我编写了一个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 :(得分:0)

这就是我的目标:

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