我一直在玩 powershell 的动态能力,我想知道一些事情
powershell 中是否有任何类似于 Ruby 的 method_missing() 的东西,您可以在其中设置“捕获所有方法”来动态处理对对象上不存在的方法的调用?
我一直在玩 powershell 的动态能力,我想知道一些事情
powershell 中是否有任何类似于 Ruby 的 method_missing() 的东西,您可以在其中设置“捕获所有方法”来动态处理对对象上不存在的方法的调用?
不,不是。我怀疑 PowerShell 的下一个版本将更符合添加到 .NET 4 的动态调度功能,但目前这在纯 PowerShell 中是不可能的。
尽管我确实记得有一个类似于 .NET 的 TypeDescriptor 中的组件模型,用于创建为 PowerShell 动态提供属性和方法的对象。例如,这就是如何将 XML 元素视为对象的方式。但是,如果根据我的经验,很多需要集成的类型/方法都被标记为内部的,那么它的文档记录很差。
你可以模仿它,但这很棘手。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 逻辑。
您可以在 Powershell 2.0 中使用 Try Catch
http://blogs.technet.com/b/heyscriptingguy/archive/2010/03/11/hey-scripting-guy-march-11-2010.aspx