Tengo un gran conjunto de funciones definidas en un módulo de script de PowerShell. Quiero usar Export-ModuleMember -Function *
, pero quiero excluir solo una función. Será más fácil para mí excluir esta función que enumerar todas las funciones incluidas. ¿Hay alguna forma de lograr esto?¿Puedo excluir una sola función de Export-ModuleMember?
Respuesta
Mi respuesta de stock sobre la exclusión de funciones es usar la denominación del sustantivo del verbo para las funciones que quiero exportar, y usar los límites iniciales para todo lo demás.
Luego, Export-ModuleMember -function *-*
se ocupa de ello.
Encuentra todas las funciones en un guión y luego filtrar en base a lo que desea excluir (suponiendo PowerShell v2):
$errors = $null
$functions = [system.management.automation.psparser]::Tokenize($psISE.CurrentFile.Editor.Text, [ref]$errors) `
| ?{(($_.Content -Eq "Function") -or ($_.Content -eq "Filter")) -and $_.Type -eq "Keyword" } `
| Select-Object @{"Name"="FunctionName"; "Expression"={
$psISE.CurrentFile.Editor.Select($_.StartLine,$_.EndColumn+1,$_.StartLine,$psISE.CurrentFile.Editor.GetLineLength($_.StartLine))
$psISE.CurrentFile.Editor.SelectedText
}
}
Esta es la técnica que utilicé para v2 para crear un ISE Function Explorer. Sin embargo, no veo una razón por la cual esto no funcione con texto plano fuera de ISE. Sin embargo, necesita solucionar los detalles de la línea de cuidado. Este es solo un ejemplo de cómo lograr lo que quieres.
Ahora, filtra lo que no se necesita y canaliza esto a Export-ModuleMember
!
$functions | ?{ $_.FunctionName -ne "your-excluded-function" }
Si está utilizando v3 PowerShell, la parser makes it a lot easier.
Mi solución, utilizando PowerShell V3, como se insinuó por Ravikanth (que estaba usando V2 en su solución), es definir un módulo PSParser
:
Add-Type -Path "${env:ProgramFiles(x86)}\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll"
Function Get-PSFunctionNames([string]$Path) {
$ast = [System.Management.Automation.Language.Parser]::ParseFile($Path, [ref]$null, [ref]$null)
$functionDefAsts = $ast.FindAll({ $args[0] -is [System.Management.Automation.Language.FunctionDefinitionAst] }, $true)
$functionDefAsts | ForEach-Object { $_.Name }
}
Export-ModuleMember -Function '*'
Y en un módulo, si quiero excluir una dada la función, la última línea se vería así:
Export-ModuleMember -Function ((Get-PSFunctionNames $PSCommandPath) | Where { $_ -ne 'MyPrivateFunction' })
Tenga en cuenta que esto sólo funcionará en PowerShell V3 o temprano porque el analizador AST y $PSCommandPath
se introdujeron en la versión 3.
- 1. ¿Cómo puedo escapar de una sola cita?
- 2. Spellcheck una sola palabra en función de Excel
- 3. Obtener una sola columna de una entidad
- 4. ¿Cómo puedo excluir una clase de mi selector jQuery?
- 5. ¿Cómo puedo excluir algunos caracteres de una clase?
- 6. Combinación de métodos S4 y S3 en una sola función
- 7. Memoria libre y nula en Delphi usando una sola función
- 8. ¿Cómo puedo excluir fuentes en una tarea javac en hormiga?
- 9. Excluir una clase de una appender log4j
- 10. ¿Cómo puedo escapar de una sola cita en Ruby?
- 11. WordPress: ¿cómo puedo obtener RSS Feed de una sola publicación?
- 12. Excluir clases de una dependencia en Maven
- 13. django: excluir ciertos elementos de formulario en función de una condición
- 14. asignar una sola entrada de un mapa
- 15. Cálculo de distancia usando una sola cámara
- 16. MySQL: ¿cuántas filas puedo insertar en una sola instrucción INSERT?
- 17. ¿cómo puedo organizar una sola línea en SmartGit?
- 18. ¿Cómo puedo ejecutar una sola prueba con Nose in Pylons
- 19. ¿Cómo puedo hacer 2 métodos comparables en una sola clase?
- 20. ¿Cómo puedo hacer Compojure escuchar a una sola dirección IP
- 21. ¿Puedo tener varias claves principales en una sola tabla?
- 22. ¿Puedo incluir una función dentro de otra función?
- 23. ¿Cómo seleccionar una sola sobrecarga de una función con el uso de la función namespace :: en C++?
- 24. Excluir una extensión de archivo en System.IO.Directory.GetFiles()
- 25. Excluir pruebas de una determinada categoría
- 26. Rubí lista de archivos excluir una carpeta
- 27. ¿Cómo puedo excluir algunas carpetas de mi proyecto de Eclipse?
- 28. ¿Cómo devolver una sola variable desde una función del kernel CUDA?
- 29. Replicar una sola tabla
- 30. .replaceWith() trabajando una sola vez
¡La simplicidad y la base de la convención de esta respuesta realmente me hablan! –