PowerShell, métodos de extensión y parches de mono
-
20-08-2019 - |
Pregunta
¿Es posible escribir un método de extensión en PowerShell? o para atornillar un nuevo método sobre un tipo existente como [cadena] en vivo en tiempo de ejecución?
Solución
No conozco una forma de parchear un tipo con un método de extensión. Pero ciertamente es posible parchear un objeto a través del cmdlet add-member
PS> $a = "foo"
PS> $a = add-member -in $a -memberType ScriptMethod -name Bar -value { $this + "bar" } -passthru
PS> $a.Foo()
foobar
EDITAR Explique la sintaxis de PowerShell completamente legible :)
Me encanta PowerShell, pero de vez en cuando aparece una sintaxis críptica.
- " -in " ;: Esto es la abreviatura de inputObject y esencialmente dice agregar miembro a esto
- " -memberType " ;: Hay muchos tipos diferentes de valores que puede agregar a un objeto en tiempo de ejecución, incluidos los métodos, las propiedades de nota, el método de código, etc ... Consulte '' get-help add-member -full '' para una lista completa
- " -passthru " ;: Tome el objeto que acaba de agregar un miembro y empújelo hacia abajo. Sin este indicador, la asignación estaría asignando y canalizando vacío a
$ a
. - La llamada de asignación básicamente garantiza que
$ a
ahora tenga el método que agregó
Otros consejos
Si tiene un método o propiedad que desea agregar a un tipo en particular, puede crear una extensión de tipo personalizada a través del sistema de tipo adaptativo de PowerShell.
Una extensión de tipo personalizada es un archivo XML que describe la propiedad o el método de script para un tipo y luego lo carga en la sesión de PowerShell a través del cmdlet Update-TypeData.
Un gran ejemplo de esto se puede encontrar en Blog del equipo de PowerShell: ¿Odio agregar miembro? (Sistema de tipo adaptativo de PowerShell al rescate)