Obtenez la définition de la fonction et faites écho au code

18

J'ai défini une fonction dynamique dans PowerShell, comme ceci:

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

Ensuite, je peux simplement taper testet exécuter cette fonction, la rediriger vers d'autres commandes, etc. Assez pratique.

Existe-t-il un moyen d'obtenir la définition de la commande? Puis-je faire écho au code de ma fonction test? (Sans avoir à revenir à travers mon histoire là où je l'ai définie?)

Jeff B
la source

Réponses:

21

Pour une fonction appelée test:

$function:test

Ou si le nom de la fonction contient un trait d'union (par exemple test-function):

${function:test-function}

Alternativement:

(Get-Command test).Definition
Indrek
la source
5
(Get-Command Test).Definition

C'est comme ça que j'obtiens normalement des définitions.

EBGreen
la source
Dans$profile function def ($funcname) { (Get-Command $funcname).Definition }
Kolob Canyon
3

Les réponses actuelles ne fonctionneront que pour les fonctions qui ont été créées localement. Vous pouvez, par exemple, voir la définition des fonctions natives comme Get-EventLog.

Pour une liste de toutes les fonctions disponibles, vous pouvez exécuter:

Get-ChildItem Function::

Chacun de ces éléments peut être transmis à ${function:myFn}ou(Get-Command myFn).Definition

Si vous voulez jeter un œil aux fonctions natives, vous pouvez exécuter ce code :

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