¿Alguien tiene un ejemplo que muestra cómo sobrescribir la función TabExpansion2 en Windows PowerShell 3.0? Sé cómo anular la antigua función TabExpansion, pero quiero proporcionar una lista de elementos para intellisense en PowerShell ISE. Miré la definición de TabExpansion2 y no era fácil de entender cómo inyecté mi propio código en el proceso de expansión de pestañas.Ejemplo que muestra cómo sobrescribir TabExpansion2 en Windows PowerShell 3.0
Respuesta
Creo que este ejemplo debería darle un buen punto de partida: Windows Powershell Cookbook: Sample implementation of TabExpansion2. El código de ejemplo muestra que puede agregar código antes y después de las llamadas predeterminadas al [CommandCompletion]::CompleteInput
.
Por ejemplo, puede agregar una entrada a la tabla hash $options
llamada CustomArgumentCompleters para obtener una finalización personalizada para los argumentos del comando. La entrada debe ser una tabla hash donde las claves son nombres de argumento (por ejemplo, "ComputerName" o "Get-ChildItem: Filter") y los valores son matrices de valores que podrían usarse para completar ese parámetro. Powertheshell.com también tiene un artículo sobre esto: Dynamic Argument Completion. También puede especificar terminaciones personalizadas para ejecutables nativos, usando la opción NativeArgumentCompleters (de nuevo, las claves son nombres de comando y los valores son matrices de posibles terminaciones).
Una vez que CompleteInput
ha vuelto, puede almacenar el resultado en $result
para un análisis posterior. El resultado es una instancia de la clase CommandCompletion
. Si la finalización predeterminado No se encontró ninguna coincidencia, se puede añadir sus propias CompletionResult
entradas a la lista de coincidencias:
$result.CompletionMatches.Add(
(New-Object Management.Automation.CompletionResult "my completion string"))
No se olvide de volver $result
de la función para la terminación ocurre en realidad.
Por último, una nota en la resolución de problemas: el código que llama TabCompletion2
parece aplastar toda la producción basada en la consola (como es lógico), por lo que si desea escribir mensajes de depuración para sí mismo, es posible que trate de escribir en un archivo de texto separado . Por ejemplo, se puede cambiar la función End
en TabCopmletion2
a tener este aspecto:
$result = [System.Management.Automation.CommandCompletion]::CompleteInput(
$inputScript, $cursorColumn, $options)
$result | Get-Member | Add-Content "c:\TabCompletionLog.txt"
$result
Aquí es un ejemplo de sobrescrito TabExpansion2
- TabExpansion2.ps1 y varios utilizados en los perfiles de práctica con el que finalizaron por ella:
- Invoke-Build.ArgumentCompleters.ps1 que completaron el argumento a favor de Invoke-Build
- Mdbc.ArgumentCompleters.ps1 Argu completaron Ment para Mdbc
- ArgumentCompleters.ps1 argumento, de entrada, y que completaron el resultado
Los puntos de interés:
- TabExpansion2.ps1 Cómo funciona el mínimo de la carga. La inicialización potencialmente costosa se realiza una vez cuando la finalización realmente ocurre.
- Anulado
TabExpansion2
proporciona un mecanismo de extensión a través de uno o más perfiles*ArgumentCompleters.ps1
en la ruta. Los perfiles se invocan una vez en la primera llamada deTabExpansion2
.Varios perfiles pueden venir con diferentes módulos independientes, herramientas, etc., y se pueden usar de forma simultánea. - Además de que completaron el argumento a medida estándar y que completaron el argumento nativas esta costumbre
TabExpansion2
soporta procesadores resultado el que pellizcan los resultados de la incorporada en el terminación y entrada procesadores que puede interceptar y reemplazar la terminación incorporada. - Funciona alrededor de los resultados integrados de solo lectura en algunos casos.
- ArgumentCompleters.ps1 contiene un ejemplo de procesador de entrada que reemplaza la terminación incorporada de tipos y espacios de nombres con una alternativa, más útil a veces.
- Otra más completa proporciona la terminación de comentarios: etiquetas de ayuda (.Synopsis, .Descripción, etc.) y la finalización de código comentado a cabo, por qué no?
- 1. Windows: Sobrescribir archivo en uso
- 2. ¿Cómo se muestra el botón de menú en Android 3.0?
- 3. Se supone que PowerShell 3.0 tiene una sintaxis más limpia, ¿cómo se ve?
- 4. Extensión de color Mercurial en Windows Powershell
- 5. proceso de ejecución condicional en Windows PowerShell (por ejemplo, el && y || operadores en Bash)
- 6. ¿Cómo desactivar Windows Remote-Desktop con Powershell?
- 7. ¿Cómo desactivo el UAC con Windows PowerShell?
- 8. Windows Powershell SDK y System.Management.Automation.PSObject
- 9. ¿Cómo sobrescribir register_argc_argv en PHP?
- 10. ¿Cómo hacer que powershell sea menos detallado en los errores?
- 11. Windows powershell: cambiando el símbolo del sistema
- 12. ¿Dónde establece Windows PowerShell $ profile?
- 13. httpOnly Session Cookie + Servlet 3.0 (por ejemplo, Glassfish v3)
- 14. Ejemplo de Windows Identity Foundation Solicitud MVC
- 15. ¿Cómo puedo hacer una captura de pantalla en Windows PowerShell?
- 16. ¿Cómo ejecutar una aplicación Metro desde PowerShell en Windows 8?
- 17. Autenticación de Windows integrada que muestra el usuario registrado incorrecto
- 18. Windows Phone - PhotoChooserTask no muestra
- 19. EntityFramework cómo sobrescribir las propiedades
- 20. cómo realizar boost :: filesystem copy_file con sobrescribir
- 21. Crear usuario local con PowerShell (Windows Vista)
- 22. Powershell 3.0 - Flujos de trabajo - Limite el número de ejecución en paralelo
- 23. ¿Cómo borrar $ Error en PowerShell?
- 24. PowerShell - cadenas que se añaden
- 25. Cambiar el separador de ruta en Windows PowerShell
- 26. ¿Cómo sobrescribir la funcionalidad window.open?
- 27. Cómo sobrescribir td align = "center"?
- 28. Cómo sobrescribir la salida estándar en C
- 29. cómo sobrescribir datos en un archivo txt?
- 30. ¿Cómo sobrescribir toString() correctamente en Java?
¿Está documentado en algún lugar formalmente? ¿Cómo salió originalmente esta información? –
Lamentablemente no he visto ninguna documentación formal, pero me encantaría verla si existe. – Charlie