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?)

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

5
(Get-Command Test).Definition

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.