PowerShell v5 には新しい機能が付属しています。オブジェクトの昔ながらの作成の代わりに
New-Object System.Text.StringBuilder
新しい構文を使用することが可能です
[System.Text.StringBuilder]::new()
ただし、新しい構文には問題があります。クラスに静的メソッドがある場合、
New
それを直接呼び出すことはできなくなります。PowerShell は、この静的メソッドではなく、コンストラクターを呼び出そうとしていると考えているようです。
私の実際の問題はここでは説明できないので、例として既存のクラスを使用します。
このコードは PowerShell v4 で動作します
[System.Linq.Expressions.Expression]::New([psobject])
静的メソッドNew
を呼び出して式を作成します。
v5では失敗します
Cannot find an overload for "new" and the argument count: "1".
At line:1 char:5
+ [System.Linq.Expressions.Expression]::New([psobject])
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
New
問題は、PowerShell v5 で静的メソッドをどのように呼び出すかです。