Есть ли у powershell метод method_missing ()? - PullRequest
3 голосов
/ 26 августа 2010

Я играл с динамическими способностями PowerShell, и мне было что-то интересно

Есть ли в PowerShell что-нибудь, аналогичное методу Ruby method_missing (), в котором вы можете настроить метод 'catch all' для динамической обработки вызовов несуществующих методов ваших объектов?

Ответы [ 3 ]

2 голосов
/ 26 августа 2010

Нет, не совсем.Я подозреваю, что следующая версия PowerShell станет более совместимой с возможностями динамической диспетчеризации, добавленными в .NET 4, но в настоящее время это невозможно сделать в чистом PowerShell.является компонентной моделью, аналогичной той, что используется в TypeDescriptor .NET для создания объектов, которые динамически предоставляют свойства и методы для PowerShell.Так XML-элементы можно обрабатывать, например, как объекты.Но это плохо документировано, если вообще, по моему опыту, многие типы / методы, необходимые для интеграции, помечены как внутренние.

1 голос
/ 22 июня 2011

Вы можете подражать этому, но это сложно.Техника описана в книге Ли Холмса и сводится к двум сценариям - Add-RelativePathCapture http://poshcode.org/2131 и New-CommandWrapper http://poshcode.org/2197.

Суть в том, что любой командлет можно переопределить с помощью New-CommandWrapper.Таким образом, вы можете переопределить Out-Default, который неявно вызывается в конце почти каждой команды (исключая команды с явными форматерами, такими как Format-Table в конце).В новом Out-Default вы проверяете, не выдает ли последняя команда исключение, сообщающее, что метод / свойство не найдено.И там вы вставляете свою логику method_missing.

0 голосов
/ 26 августа 2010

Вы можете использовать Try Catch в Powershell 2.0

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

...