New-Object -Property Hashtable没有在Win 10上的5.0版本中填充字段

Mat*_*man 8 powershell powershell-5.0

以下代码在PowerShell 4.0及更早版本中运行良好.如果我在最新的Windows 10版本的5.0.10240.16384版本上运行它,则字段不会填充在新对象($ a)中.这是一个错误还是有变化?

Add-Type @"
   public struct TestUser {
    public string First;
    public string Last;
}
"@;

$a = New-Object TestUser -Property @{ First = "Joe"
                                Last = "Smith"};
Run Code Online (Sandbox Code Playgroud)

版本4.0及更早版本的结果:

$a.First -eq "Joe"
$a.Last -eq "Smith"
Run Code Online (Sandbox Code Playgroud)

5.0版

$a.First -eq $null
$a.Last -eq $null
Run Code Online (Sandbox Code Playgroud)

第5版Get-Member

TypeName: TestUser

Name        MemberType Definition                    
 ----        ---------- ----------                    
Equals      Method     bool Equals(System.Object obj)
GetHashCode Method     int GetHashCode()             
GetType     Method     type GetType()                
ToString    Method     string ToString()             
First       Property   string First {get;set;}       
Last        Property   string Last {get;set;}      
Run Code Online (Sandbox Code Playgroud)

编辑: 我已向微软提交了一个有关此问题的错误,因为这是一个重大变化(如果它是一个更改)将影响许多现有脚本.如果该错误报告有任何更新,我将更新此问题.我仍然在寻找任何反馈,如果有人遇到过v5中可能暗示这是期望/改变行为的事情.很高兴在v5上尝试其他测试,如果有人好奇并且无法访问Win 10机器.

https://connect.microsoft.com/PowerShell/feedbackdetail/view/1552941/new-object-property-hashtable-not-populating-fields-in-version-5-0-on-win-10

Kei*_*ill 4

我已从 PowerShell 团队成员处得到证实,这是与缺少“拆箱”调用相关的错误。目前的解决方法是如果可能的话使用类而不是结构。有人提到,struct 在 PowerShell 中几乎没有什么好处,因为 PowerShell 总是会装箱一个 struct。