8

次のコードは、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"};

バージョン 4.0 以前の結果:

$a.First -eq "Joe"
$a.Last -eq "Smith"

バージョン 5.0

$a.First -eq $null
$a.Last -eq $null

バージョン 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;}      

編集: これは、多くの既存のスクリプトに影響を与える重大な変更 (変更の場合) であることに基づいて、これに関するバグを Microsoft に提出しました。そのバグレポートに更新がある場合は、この質問を更新します。これが望ましい/変更された動作であることを示唆する可能性のある v5 の何かに誰かが遭遇した場合、私はまだフィードバックを探しています。興味があり、Win 10 マシンにアクセスできない場合は、v5 で他のテストも試してみてください。

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

4

1 に答える 1

4

PowerShell チーム メンバーから、これが "unbox" 呼び出しの欠落に関連するバグであることが確認されました。現時点での回避策は、可能であれば構造体の代わりにクラスを使用することです。PowerShell は常に構造体をボックス化するため、構造体は PowerShell ではほとんどメリットがないことが言及されました。

于 2015-07-17T21:27:21.293 に答える