PowerShell, методы расширения и исправления Monkey
-
20-08-2019 - |
Вопрос
Можно ли написать метод расширения в PowerShell?или прикрепить новый метод поверх существующего типа, например [string], в реальном времени во время выполнения?
Решение
Я не знаю, как исправить тип с помощью метода расширения.Но, безусловно, можно исправить объект с помощью командлета 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, но время от времени он действительно сталкивается с загадочным синтаксисом.
- "-в":Это сокращение от inputObject и, по сути, говорит о добавлении участника к этому
- "-memberType":Существует множество различных типов значений, которые вы можете добавить к объекту среды выполнения, включая методы, свойства примечаний, метод кода и т. д.Полный список см. в разделе «get-help add-member -full».
- "-пройти через":Возьмите объект, к которому только что был добавлен член, и пропустите его по конвейеру.Без этого флага назначение было бы назначением и пустым конвейером.
$a
. - Вызов присваивания в основном гарантирует, что
$a
теперь есть метод, который вы добавили
Другие советы
Если у вас есть метод или свойство, которое вы хотите добавить к определенному типу, вы можете создать собственное расширение типа с помощью адаптивной системы типов PowerShell.
Расширение пользовательского типа - это файл XML, который описывает свойство или метод сценария для типа, а затем загружает его в сеанс PowerShell с помощью командлета Update-TypeData.
Отличный пример этого можно найти на Блог команды PowerShell - Ненависть к члену? (Адаптивная система типов PowerShell для спасения)