这就是我所做的:
首先,我创建了一个PSObject
类型的新实例。
然后,我使用Get-Member查找所有这些酷炫成员(但它们并不存在):
PS .> $plainObj = New-Object PSObject
PS .> $plainObj | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
问题:
没有BaseObject
属性,也没有AsPSObject()
方法。所有很酷的成员都不在那里。但是为什么呢?
Get-Member告诉我,我的对象的种类(TypeName
)是PSCustomObject
,而不是PSObject
。而PSCustomObject
并没有所有这些很酷的成员。
但我不想$plainObj
成为PSCustomObject
的一个种类 - 我希望它成为PSObject
的一种类型。
我的问题:
为什么
$plainObj
是PSCustomObject
的一种类型,尽管我明确地使用-TypeName
在$plainObj New-Object PSObject
中使用了PSObject
?有什么想法吗?如何让
$plainObj
成为PSObject
的一种类型,而不是PSCustomObject
的一种类型?
@RussC Even if I use your script - that's the result:
PS .> $plainObj = New-Object PSObject -property @{ title = 'fridojet' }; $plainObj | Add-Member -MemberType NoteProperty -Name Colour -Value Blue PS .> $plainobj | Get-Member TypeName: System.Management.Automation.PSCustomObject Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString() Colour NoteProperty System.String Colour=Blue title NoteProperty System.String title=fridojet
@RussC Now I managed to create an object which is not kind of
PSCustomObject
:PS .> New-Object Object
But even then, I'm not able to create a
PSObject
(with aBaseObject
property and so on):
PS .> [PSObject]::AsPSObject((New-Object Object)) | Get-Member TypeName: System.Object Name MemberType Definition ---- ---------- ---------- Equals Method bool Equals(System.Object obj) GetHashCode Method int GetHashCode() GetType Method type GetType() ToString Method string ToString()
-property
还是Add-Member
来向我的对象添加属性?” - 那么我的答案是:我两个都用 - 首先我使用-property
添加title
属性,然后我使用Add-Member
添加Colour
属性。我只是采用了你回答中的代码。 - fridojetAsPSObject()
方法和BaseObject
属性是最有趣的。 - fridojet