【发布时间】:2011-07-21 21:05:58
【问题描述】:
我对 Select-Object cmdlet 的一些行为感到困惑。这是一个例子。
PS C:\> $object = get-item C:\windows\Temp
PS C:\> $time = $object.CreationTime
PS C:\> $time.GetType().FullName
System.DateTime
PS C:\> $result = Select-Object -InputObject $object -Property "CreationTime"
PS C:\> $result.GetType().FullName
System.Management.Automation.PSCustomObject
PS C:\>
PS C:\> $result.CreationTime.GetType().FullName
System.DateTime
注意CreationTime 的类型是System.DateTime,但是当我使用Select-Object 选择它时,返回的对象是System.Management.Automation.PSCustomObject 类型。它是一些以CreationTime 为属性的新对象。
让我们看看Select-Object 的帮助来解释这一点。
概要
选择一个对象或一组对象的指定属性...
这就是我想要的,属性本身……而不是带有属性的对象。但如果我们进一步阅读......
描述
...如果您使用 Select-Object 选择指定的属性,它会从输入对象中复制这些属性的值,并创建具有指定属性和复制值的新对象。
我不知道为什么这很有用,但它解释了返回的这个对象。
使用-ExpandProperty 而不是-Property 似乎赋予了属性本身
PS C:\> $result2 = Select-Object -InputObject $object -ExpandProperty "CreationTime"
PS C:\> $result2.GetType().FullName
System.DateTime
-ExpandProperty 为什么要这样做?让我们看看它的帮助:
-ExpandProperty
指定要选择的属性...如果该属性包含一个对象,则该对象的属性将显示在输出中。
在这种情况下,属性是一个对象,我们没有得到“那个对象的属性”,我们只得到了对象本身。
谁能告诉我:
- 当帮助中提到扩展数组和获取属性对象(而不是属性对象本身)的属性时,为什么
-ExpandProperty会获取属性对象本身?这是我很困惑的地方。我读错了吗?我觉得这需要再次进行技术编辑。 - 用“-Property”返回的对象,有什么用吗?
【问题讨论】:
标签: powershell