Obtenga la definición de la función y haga eco del código

18

He definido una función dinámica en powershell, como esta:

> function test { dir -r -fil *.vbproj | ft directory, name }

Entonces puedo simplemente escribir testy ejecutar esa función, canalizarla a otros comandos, etc. Bastante útil.

¿Hay alguna manera de obtener la definición del comando? ¿Puedo hacer eco del código para mi función test? (¿Sin tener que volver a mi historia donde la definí?)

Jeff B
fuente

Respuestas:

21

Para una función llamada test:

$function:test

O si el nombre de la función contiene un guión (por ejemplo test-function):

${function:test-function}

Alternativamente:

(Get-Command test).Definition
Indrek
fuente
5
(Get-Command Test).Definition

Así es como normalmente obtengo definiciones.

EBGreen
fuente
En$profile function def ($funcname) { (Get-Command $funcname).Definition }
Kolob Canyon
3

Las respuestas actuales solo funcionarán para funciones que se hayan creado localmente. Puede, por ejemplo, ver la definición de funciones nativas como Get-EventLog.

Para obtener una lista de todas las funciones disponibles, puede ejecutar:

Get-ChildItem Function::

Cualquiera de estos puede pasarse ${function:myFn}o(Get-Command myFn).Definition

Si desea echar un vistazo a las funciones nativas, puede ejecutar este código :

$metadata = New-Object system.management.automation.commandmetadata (Get-Command Get-EventLog)
[System.management.automation.proxycommand]::Create($MetaData) | out-file C:\Get-EventLog.ps1
KyleMit
fuente