繁体   English   中英

PowerShell - 如何从数组中获取 PsObject 属性的值?

[英]PowerShell - How to get the value of PsObject property from an array?

编辑:改写问题更清楚

这是工作代码:

$arr = @(
    @('prop0','name0'),
    @('prop1','name1'),
    @('prop2','name2')
)

$obj = New-Object PsObject
foreach($innerArr in $arr)
{
    $obj | Add-Member -NotePropertyName $innerArr[0] -NotePropertyValue $null
}

$obj2 = New-Object PsObject
$count = 0
foreach($innerArr in $arr)
{
    $value = 'val' + $count
    $obj2 | Add-Member -NotePropertyName $innerArr[1] -NotePropertyValue $value
    $count ++
}

for($i=0; $i -lt $arr.Count; $i++)
{
    # This is what I want to consolidate into one line
    # {
    $prop_name = $arr[$i][1]
    $obj | Add-Member -NotePropertyName $arr[$i][1] -NotePropertyValue $obj2.$prop_name
    # }
}

如何在不将属性名称分配给$prop_name情况下执行此$prop_name

$obj的输出应如下所示:

PS C:\> $obj
prop0 : 
prop1 : 
prop2 : 
name0 : val0
name1 : val1
name2 : val2

这将使您通过您出错的部分:

$obj | Add-Member -NotePropertyName $arr[$i][1] -NotePropertyValue $obj2.PSObject.Properties.Item("name$i").value

问题是当 PSobject 不像数组时,您将其视为数组。 它更像是一本字典。

核心价值

核心价值

核心价值

由于没有层次结构,您必须指定要查找的 Key。

如果我要这样做,我会选择类似的东西

$obj2arr = @($obj2.PSObject.Properties | %{$_})
for($i=0; $i -lt $arr.Count; $i++)
{
     $obj | Add-Member -NotePropertyName $arr[$i][1] -NotePropertyValue $obj2arr[$i].Value
}

将 PSObject 转换为 Items 数组并拉取我要使用的属性

自从我在这里回答以来,您的问题发生了一些变化,因此脚本已缩短

$arr = @(
    @('prop0','name0'),
    @('prop1','name1'),
    @('prop2','name2')
)
$obj = New-Object PsObject
$arr | %{ $obj | Add-Member -NotePropertyName $_[0] -NotePropertyValue $null}
$obj2 = New-Object PsObject
$count = 0
$arr | %{ $obj2 | Add-Member -NotePropertyName $_[1] -NotePropertyValue ('val' + $count); $count++}
$obj2arr = @($obj2.PSObject.Properties | %{$_})
$count = 0
$arr | foreach-object{$obj | Add-Member -NotePropertyName ($_)[1] -NotePropertyValue $obj2arr[$count].Value; $count++}
$obj

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM