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 中调用静态方法?