我在这里实现了 Bart de Smet 的解决方案,用于向 Powershell 添加扩展方法:
http://bartdesmet.net/blogs/bart/archive/2007/09/06/extension-methods-in-windows-powershell.aspx
效果很好!几乎!他正在过滤掉泛型,但那是在黑暗时代(2007 年),所以我试图弄清楚今天是否可以使用 Powershell 3.0。这是我正在尝试做的一个简单示例:
$ls = new-object collections.generic.list[string]
'generic'
update-typedata -force -typename collections.generic.list`1 `
-membertype scriptmethod -membername test -value {'test!'}
$ls.test() # fail
'string'
update-typedata -force -typename collections.generic.list[string] `
-membertype scriptmethod -membername test -value {'test!'}
$ls.test() # works!
这输出:
generic
Method invocation failed because [System.Collections.Generic.List`1[[System.String, mscorlib,
Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]] doesn't contain a method
named 'test'.
At C:\Temp\blah5.ps1:12 char:1
+ $ls.test()
+ ~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
string
test!
现在,Powershell 能够使用泛型类型定义。它似乎没有与 typedata 系统集成......
还是我做错了?您有什么办法可以使这项工作发挥作用吗?