¿Es posible escribir método de extensión en PowerShell? o para atornillar un nuevo método sobre un tipo existente como [cadena] en vivo en el tiempo de ejecución?PowerShell, métodos de extensión, y el mono de parches
Respuesta
no sé de una manera de arreglar un tipo con un método de extensión. Pero es ciertamente posible para reparar un objeto mediante el 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 Explicar la completa y totalmente legible PowerShell Sintaxis :)
Me encanta PowerShell pero realmente viene con la sintaxis críptica de vez en cuando.
- "-en": Esta es la abreviatura de InputObject y esencialmente dice añadir a este miembro
- "-MemberType": Hay muchos tipos diferentes de valores que se pueden agregar a un objeto en tiempo de ejecución, incluidos los métodos de propiedades de la nota , método de código, etc ... Consulte "get-help añadir miembros Full" para obtener una lista completa
- "-passthru": Tome el objeto que acaba de tener un miembro añadido a la misma y empuje hacia abajo la tubería. Sin esta bandera, la asignación asignaría una tubería vacía al
$a
. - La llamada asignación es básicamente asegurar que
$a
tiene ahora el método que agregó
Si usted tiene un método o propiedad que desea añadir a un tipo particular, puede crear una extensión de tipo personalizado a través de tipo adaptativo de PowerShell sistema.
Una extensión de tipo personalizado es un archivo XML que describe el método de propiedad o escritura a un tipo y luego cargarlo en la sesión de PowerShell mediante el cmdlet Update-TypeData.
Un gran ejemplo de esto se puede encontrar en la PowerShell Team Blog - Hate Add-Member? (PowerShell's Adaptive Type System to the Rescue)
Sí, ESTA es la respuesta que busca el póster original. – JasonMArcher
Me tropecé con este método. No es seguro. Me gustaría conservar todo lo que pueda en PowerShell versus XML. hmmm. Supongo que usaría este método si tuviera muchos y muchos "mods" para hacer. – BuddyJoe
- 1. mono de parches en Rails 3
- 2. Mejores prácticas: C# Espacio de nombres de métodos de extensión y promoción de métodos de extensión
- 3. C#: operador implícito y métodos de extensión
- 4. ¿Métodos de extensión virtual?
- 5. C# utilizando params y métodos de extensión
- 6. métodos de extensión estáticas
- 7. ¿Los métodos LINQ son métodos de extensión?
- 8. el decorador del patrón y Métodos de extensión en C#
- 9. Organización de métodos de extensión
- 10. Métodos de extensión de enumeración
- 11. Métodos de extensión no reconocidos
- 12. métodos de extensión en T4
- 13. Reemplazando los métodos de extensión
- 14. C# métodos de extensión ambiguos
- 15. Métodos oficiales de extensión LINQ
- 16. Métodos de extensión en Python
- 17. de sintaxis y de cadena métodos de extensión VB.NET
- 18. Extensión de color Mercurial en Windows Powershell
- 19. Extensión de archivo para PowerShell 3
- 20. Métodos de extensión y verificación en tiempo de compilación
- 21. Métodos de extensión de expresión RDLC
- 22. burlando de métodos de extensión con Moq
- 23. Métodos de extensión de encadenamiento en C#
- 24. C# Métodos de extensión - patrones de diseño
- 25. ¿Los scripts de PowerShell se ejecutan en Mono?
- 26. problema intellisense ReSharper con métodos de extensión
- 27. Métodos de extensión: cambiar el espacio de nombres
- 28. Métodos de extensión vs Static Utility Class
- 29. ¿Los métodos de extensión ocultan las dependencias?
- 30. "Métodos de extensión" en Objective-C
1 Podría elaborar sobre la sintaxis un poco. El miembro $ a = add se ve un poco extraño y ¿qué hacen los switches -in y -passthru? – BuddyJoe
@Tyndall, actualizado con comentarios – JaredPar
Gracias JaredPar – BuddyJoe