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?

¿Fue útil?

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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top