powershell - .GetType() 和 Get-Member 之间的类型不同

标签 powershell

为什么 GetType() 返回的类型与 Get-Member 不同?

PS C:\> Find-Module -Name vssetup | Install-Module
PS C:\> $x = (Get-VSSetupInstance)[0]
PS C:\> $x.GetType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     False    Instance                                 System.Object

PS C:\> $x | Get-Member

   TypeName: Microsoft.VisualStudio.Setup.Instance

Name                MemberType Definition
----                ---------- ----------
Equals              Method     bool Equals(System.Object obj)
GetHashCode         Method     int GetHashCode()
...

最佳答案

报告的类型相同,只是其表示形式不同。

从 PowerShell 7.3.4 开始,System.Reflection.TypeInfo用于显示格式.GetType() 返回的实例 - 不幸的是 - 不反射(reflect)类型的命名空间限定名称,而 Get-Member的输出确实如此。

要根据 .GetType() 调用获取类型的命名空间限定名称,只需访问返回对象的 .FullName 属性即可:

# -> 'Microsoft.VisualStudio.Setup.Instance'
$x.GetType().FullName

请注意,Get-Member 的目的不仅仅报告 .NET 类型的身份,而且还报告它的成员 - 因此有关 EqualsGetHashCode 等的附加信息(通过 Microsoft.PowerShell.Commands.MemberDefinition 实例的显示格式进行调节, >Get-Member 输出)。

因此,显示格式的细节在设计上是不同的。


顺便说一句:

  • 不幸的是,Microsoft.PowerShell.Commands.MemberDefinition 实例在提供有关 .NET 类型成员的有用且格式良好的高级信息时,它们< em>不提供对 System.Reflection.MemberInfo 所提供的完整 .NET 反射 API 的访问- 直接在类型上调用的反射方法输出的派生实例(.GetType().GetMember(...) 等)。

  • 参见this answer对于函数 Get-NativeMember,它提供与 Get-Member 类似的便利,但返回完整的实际 System.Reflection.MemberInfo 派生实例访问 .NET 的反射 API;请注意,它仅针对类型 native 成员执行此操作(不适用于通过 PowerShell 的 ETS(扩展类型系统)提供的成员)。

关于powershell - .GetType() 和 Get-Member 之间的类型不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76377743/

相关文章:

powershell - 根据 powershell 中另一个参数的值设置 [Parameter (mandatory = $true/$false)]

arrays - Powershell 中的@() 和@{} 之间有什么区别以及何时使用它们?

sql - Powershell和SQL:如何将查询的值存储在变量中?

powershell - 使用两个等长数组执行数学运算

powershell - 如何在 Xrm 工具包中为 CrmServiceClient 启用日志记录?

regex - 正则表达式匹配任何字符串powershell

powershell - 如何修复损坏的 Powershell 安装?

powershell - 在 Powershell 中获取解析的文件路径

.net - 如何在powershell中为文件列表设置颜色

powershell - 为什么在后台运行时工作脚本会失败?