为了补充 LotPings 的有用答案,它提供了有效的解决方案:
至于为什么您的代码不起作用:
虽然Select-Object
's-Property
参数接受定义计算属性的哈希表(例如在您的代码中),但该参数仅接受属性name,作为string。-ExpandProperty
因此,您的哈希表只是stringified,导致 string literal System.Collections.Hashtable
,导致Select-Object
抱怨,因为没有该名称的属性。
的目的-ExpandProperty
是只输出一个属性值而不是具有该属性的自定义对象。
因此,您不需要通过 绕道而行Select-Object
,而可以直接使用值输出脚本块 - { $_.Created.ToString("yyyy-MM-dd") }
-ForEach-Object
代替,如 LotPings 答案的底部所示。
但是,您可以通过使用ForEach-Object
:放弃一个晦涩的功能,Select-Object
允许与结合 ,在这种情况下,通过指定的属性作为成员添加到通过指定的属性的值中:-ExpandProperty
-Property
-Property
NoteProperty
-ExpandProperty
PS> $val = [pscustomobject] @{ one = 'uno'; two = 2 } |
Select-Object -ExpandProperty one -Property two; $val; $val.two
uno
2
请注意输出字符串值如何附加'uno'
输入对象属性的副本。.two
要模拟它ForEach
需要更多的工作:
PS> $val = [pscustomobject] @{ one = 'uno'; two = 2 } | ForEach-Object {
$_.one + '!' | Add-Member -PassThru two $_.two
}; $val; $val.two
uno!
2