首页 > 解决方案 > 为什么我找不到在 PowerShell 中定义属性的位置?PSObject 类的源代码在哪里?

问题描述

我想在Github中找到PSObject.cs文件,但找不到。而且我还没有找到任何包含此类定义的文件(System.Management.Automation.PSObject)。在PowerShell的许多其他类的源代码中,我发现PSObject类被广泛使用,但是PSObject类的许多属性或方法它的官方文档中没有记录。

我想找到PSObject来源的原因是,在下面的代码中,即使第 2 部分中的语句也可以正常工作,但是第 3 部分中两个语句的输出中不包含NameAge属性。

# part 1
$obj = [pscustomobject] @{Name = "Joe"; Age = 42}

# part 2
$obj.psextended.Name  # "Joe"
$obj.Name  # "Joe"
$obj.psextended.Age  # 42
$obj.Age  # 42

# part 3
$obj.GetType().GetMembers() | select Name, MemberType  
$obj.psobject.GetType().GetMembers() | select Name, MemberType

第 3 部分中第一条语句的输出是:

Name        MemberType
----        ----------
ToString        Method
GetType         Method
Equals          Method
GetHashCode     Method

第 3 部分中第二条语句的输出是:

Name                     MemberType
----                     ----------
get_BaseObject               Method
get_Members                  Method
get_Properties               Method
get_Methods                  Method
get_ImmediateBaseObject      Method
get_TypeNames                Method
op_Implicit                  Method
op_Implicit                  Method
op_Implicit                  Method
op_Implicit                  Method
op_Implicit                  Method
AsPSObject                   Method
ToString                     Method
ToString                     Method
Copy                         Method
CompareTo                    Method
Equals                       Method
GetHashCode                  Method
GetObjectData                Method
GetType                      Method
.ctor                   Constructor
.ctor                   Constructor
.ctor                   Constructor
BaseObject                 Property
Members                    Property
Properties                 Property
Methods                    Property
ImmediateBaseObject        Property
TypeNames                  Property
AdaptedMemberSetName          Field
ExtendedMemberSetName         Field
BaseObjectMemberSetName       Field

似乎这两个属性都没有在 $obj(一个 PSCustomObject)或其包装器(一个 PSObject)中定义。

那么,NameAge属性是在哪里定义的呢?当第 2 部分中的语句运行时发生了什么?换句话说,PowerShell ETS 内部发生了什么?为什么在 $obj 或 $obj.psobject 中没有定义“名称”$obj.Name属性,但是有效?

而且,我在哪里可以找到PSObject类的真正完整源代码?

标签: powershellpsobject

解决方案


推荐阅读