从PSObject
文档中:
包装一个对象,提供可用成员的替代视图以及扩展它们的方法。成员可以是方法、属性、参数化属性等。
换句话说,aPSObject
是一个对象,您可以在创建它之后为其添加方法和属性。
从“关于哈希表”文档:
哈希表,也称为字典或关联数组,是一种紧凑的数据结构,可存储一个或多个键/值对。
...
哈希表经常被使用,因为它们对于查找和检索数据非常有效。
您可以使用 a PSObject
like a Hashtable
,因为 PowerShell 允许您向 中添加属性PSObjects
,但您不应该这样做,因为您将无法访问Hashtable
特定功能,例如Keys
和Values
属性。此外,可能会有性能成本和额外的内存使用。
PowerShell 文档包含以下信息PSCustomObject
:
当使用不带参数的 PSObject 构造函数时,用作占位符 BaseObject。
这对我来说并不清楚,但是许多 PowerShell 书籍的合著者在 PowerShell 论坛上的帖子似乎更清楚:
[PSCustomObject] 是一个类型加速器。它构造了一个 PSObject,但这样做的方式是导致哈希表键成为属性。PSCustomObject 本身不是一个对象类型——它是一个进程快捷方式。... PSCustomObject 是在没有构造函数参数的情况下调用 PSObject 时使用的占位符。
关于您的代码,@{a=1;b=2;c=3}
是一个Hashtable
. [PSObject]@{a=1;b=2;c=3}
不会将 转换Hashtable
为 aPSObject
或生成错误。对象仍然是Hashtable
. 但是,[PSCustomObject]@{a=1;b=2;c=3}
将 转换Hashtable
为PSObject
. 我找不到说明为什么会发生这种情况的文档。
如果要将 aHashtable
转换为对象以便将其键用作属性名称,可以使用以下代码行之一:
[PSCustomObject]@{a=1;b=2;c=3}
# OR
New-Object PSObject -Property @{a=1;b=2;c=3}
# NOTE: Both have the type PSCustomObject
如果要将数字转换Hashtables
为一个对象,其中它们的键是属性名称,可以使用以下代码:
@{name='a';num=1},@{name='b';num=2} |
% { [PSCustomObject]$_ }
# OR
@{name='a';num=1},@{name='b';num=2} |
% { New-Object PSObject -Property $_ }
<#
Outputs:
name num
---- ---
a 1
b 2
#>
NoteProperty
很难找到有关的文档。在Add-Member
文档中,-MemberType
除了NoteProperty
. Windows PowerShell Cookbook (第3 版)将Noteproperty
Membertype 定义为:
由您提供的初始值定义的属性
- 李,H.(2013)。Windows PowerShell 说明书。O'Reilly Media, Inc. p。895。