Object 访问PowerShell中对象属性的值

Object 访问PowerShell中对象属性的值,object,powershell,Object,Powershell,我正在浏览一组对象,可以很好地显示这些对象 $obj 显示foreach循环中的每个对象。 我正在尝试访问对象字段及其值。 此代码也可以正常工作: $obj.psobject.properties 为了只查看每个对象字段的名称,我执行以下操作: $obj.psobject.properties | % {$_.name} 这也很好用 当我尝试通过以下操作访问这些字段的值时: $obj.psobject.properties | % {$obj.$_.name} 没有返回或显示任何内容 这

我正在浏览一组对象,可以很好地显示这些对象

$obj
显示foreach循环中的每个对象。 我正在尝试访问对象字段及其值。 此代码也可以正常工作:

$obj.psobject.properties
为了只查看每个对象字段的名称,我执行以下操作:

$obj.psobject.properties | % {$_.name}
这也很好用

当我尝试通过以下操作访问这些字段的值时:

$obj.psobject.properties | % {$obj.$_.name}
没有返回或显示任何内容

这样做是为了进行诊断,以查看是否可以访问字段的值。 主要的困境是我无法访问特定字段的值。即

$obj."some field"
即使我已经确认“某个字段”有值,也不会返回值


这让我感到困惑。有人知道我做错了什么吗?

迭代foreach中的属性后,它们将通过
$\ucode>(当前对象符号)可用。正如您使用
$\uName
打印属性名称一样,使用
$\uValue
将打印它们的值:

$obj.psobject.properties | % {$_.Value}

运算符优先级按以下方式解释:

($obj.$_).Name
因为你想要什么,结果什么都没有

$obj.($_.Name)

这将首先计算属性的名称,然后在
$obj

上访问它。如果只需要其中一个属性的值,则不必迭代所有属性:

$obj.psobject.properties["bla"].value

+1.我怀疑有这么明显的事情,所以继续检查,但我回来时你已经公布了答案。作为OP的旁注-您可以通过这样做来发现
属性:
$obj.psobject.properties | gm
。我这样做是为了诊断,看看是否可以访问字段的值。然而,当我试图访问我知道存在的某个字段的值时,比如$obj。“某个字段”,什么都不返回我想到了这一点,因为出于这个确切的原因,我通常使用括号。还是不能满足我的要求,真奇怪。对我来说,一个简单的测试是
$A=gci | select-f1$a、 psobject.properties |%{$\.Name+“
t
t”+$a.($\.Name)}
效果很好。另一种方法是使用引号:
$obj.$($\.Name)“
@x0n:如果只使用圆括号(或不带周围字符串的子表达式),那么使用带子表达式的双引号字符串就有点过分了。