PowerShell, методы расширения и исправление ошибок - PullRequest
8 голосов
/ 08 мая 2009

Можно ли написать метод расширения в PowerShell? или добавить новый метод поверх существующего типа, такого как [string] live во время выполнения?

Ответы [ 2 ]

9 голосов
/ 10 мая 2009

Если у вас есть метод или свойство, которое вы хотите добавить к определенному типу, вы можете создать собственное расширение типа с помощью адаптивной системы типов PowerShell.

Пользовательское расширение типа - это файл XML, который описывает свойство или метод сценария для типа и затем загружает его в сеанс PowerShell с помощью командлета Update-TypeData.

Отличный пример этого можно найти в блоге PowerShell Team - Hate Add-Member? (Адаптивная система типов PowerShell для спасения)

9 голосов
/ 08 мая 2009

Я не знаю, как исправить тип с помощью метода расширения. Но, безусловно, возможно исправить объект с помощью командлета add-member

PS> $a = "foo"
PS> $a = add-member -in $a -memberType ScriptMethod -name Bar -value { $this + "bar" } -passthru
PS> $a.Foo()
foobar

РЕДАКТИРОВАТЬ Объяснить полностью и полностью читаемый синтаксис PowerShell:)

Мне нравится PowerShell, но он действительно время от времени предлагает загадочный синтаксис.

  • "- in": это сокращение от inputObject и по сути говорит добавление члена к этому
  • "- memberType": существует множество различных типов значений, которые можно добавить к объекту времени выполнения, включая методы, свойства заметки, метод кода и т. Д. Полный список см. В «get-help add-member -full»
  • "- passthru": возьмите объект, к которому добавлен элемент, и протолкните его вниз по конвейеру. Без этого флага присваивание будет присваивать и пустой конвейер для $a.
  • Вызов присваивания в основном гарантирует, что $a теперь имеет метод, который вы добавили
...