当我听说MSDN上PSObjectcool properties and methods时,我想尝试一下会很不错。

那就是我所做的:

首先,我创建了一个类型为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为什么是一种PSCustomObjectPSObject处将-TypeName用作$plainObj New-Object PSObject吗?
    任何的想法?
  • 如何获取$plainObj而不是PSObject而不是PSCustomObject




  • 最佳答案

    我相信它没有什么可报告的,因为它没有包装任何东西。

    如果在不包装另一个对象或不提供任何默认成员的情况下创建新的PSObject,则它将创建PSCustomObject。

    正如MSDN为PSCustomObject指出的那样:“用作当使用不带参数的PSObject构造函数时使用的占位符对象。”

    例如,如果执行此操作:

    $plainObj = New-Object PSObject -property @{ title = 'fridojet' }
    $plainObj | Add-Member -MemberType NoteProperty -Name Colour -Value Blue
    

    然后$ plainObj应该是PSObject。

    我不在Windows机器上,因此无法正确测试,因此请以一定剂量的盐服用,但希望对您有所帮助!

    编辑:

    仍在尝试寻找解决方案;但与此同时,我可以阐明一些想法。
    (记住我是从内存中这样做的!)

    AsPSObject是一个静态转换调用。
    $date = Get-Date
    $pso = PSObject.AsPSObject($date)
    

    要么
    $obj = New-Object object -property @{ title = "fridojet" }
    $pso = PSObject.AsPSObject($obj)
    

    另一方面,BaseObject返回PSObject的基类。
    使用上面的第二个示例:
    $obj = New-Object object -property @{ title = "fridojet" }
    $pso = PSObject.AsPSObject($obj)
    $end = $pso.BaseObject
    

    在这种情况下,$ end应该是一个对象;不是PSObject;如果您使用Get-Date之一; $ end应该是DateTime类型。

    我希望使用此方法将实际上返回一种PSObject,而不是PSCustomObject。

    但是,这些特性和方法的优势还是值得怀疑的。使用PSOject包装器的主要原因是当您在许多.Net类周围传递对象时。
    如果您只是通过实验进行操作,那么它不会给您带来您不知道的任何东西。

    该博客显示了使用PSObject的一些原因,尤其是在通过.Net类迭代许多对象的情况下:http://cjoprey.wordpress.com/archived/custom-object-gotchas/

    希望这可以帮助!

    08-26 15:40