3

我一直在玩 powershell 的动态能力,我想知道一些事情

powershell 中是否有任何类似于 Ruby 的 method_missing() 的东西,您可以在其中设置“捕获所有方法”来动态处理对对象上不存在的方法的调用?

4

3 回答 3

2

不,不是。我怀疑 PowerShell 的下一个版本将更符合添加到 .NET 4 的动态调度功能,但目前这在纯 PowerShell 中是不可能的。

尽管我确实记得有一个类似于 .NET 的 TypeDescriptor 中的组件模型,用于创建为 PowerShell 动态提供属性和方法的对象。例如,这就是如何将 XML 元素视为对象的方式。但是,如果根据我的经验,很多需要集成的类型/方法都被标记为内部的,那么它的文档记录很差。

于 2010-08-26T17:04:23.900 回答
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 逻辑。

于 2011-06-22T07:01:51.110 回答
0

您可以在 Powershell 2.0 中使用 Try Catch

http://blogs.technet.com/b/heyscriptingguy/archive/2010/03/11/hey-scripting-guy-march-11-2010.aspx

于 2010-08-26T17:02:40.390 回答