我一直在玩PowerShell的动态能力,我想知道一些事情
在PowerShell中是否有类似Ruby的method_missing(),你可以设置一个'catch all方法'来动态处理对象上不存在的方法的调用?
答案 0 :(得分:2)
不,不是真的。我怀疑下一版本的PowerShell将更加符合.NET 4中添加的动态调度功能,但目前在纯PowerShell中这是不可能的。
虽然我记得有一个类似于.NET的TypeDescriptor中的组件模型,用于创建向PowerShell动态提供属性和方法的对象。例如,这就是XML元素能够像对象一样对待的方式。但是根据我的经验,这很难记录,很多需要集成的类型/方法被标记为内部。
答案 1 :(得分:1)
你可以效仿它,但这很棘手。 Lee Holmes一书中描述了这种技术,并归结为两个脚本 - Add-RelativePathCapture http://poshcode.org/2131和New-CommandWrapper http://poshcode.org/2197。
本质是 - 您可以通过New-CommandWrapper覆盖任何cmdlet。因此,您可以重新定义在几乎每个命令结束时隐式调用的Out-Default(不包括具有显式格式化程序的命令,如最后的Format-Table)。在新的Out-Default中,检查最后一个命令是否引发异常,说明没有找到方法/属性。然后你插入你的method_missing逻辑。
答案 2 :(得分:0)
您可以在Powershell 2.0中使用Try Catch
http://blogs.technet.com/b/heyscriptingguy/archive/2010/03/11/hey-scripting-guy-march-11-2010.aspx