Uzyskaj definicję funkcji i powtórz kod

18

Zdefiniowałem dynamiczną funkcję w PowerShell, taką jak ta:

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

Następnie mogę po prostu wpisać testi uruchomić tę funkcję, potokując ją do innych poleceń itp. Całkiem przydatna.

Czy istnieje sposób, aby uzyskać definicję polecenia? Czy mogę powtórzyć kod mojej funkcji test? (Bez konieczności cofania się w mojej historii do miejsca, w którym ją zdefiniowałem?)

Jeff B.
źródło

Odpowiedzi:

21

Dla funkcji o nazwie test:

$function:test

Lub jeśli nazwa funkcji zawiera myślnik (np. test-function):

${function:test-function}

Alternatywnie:

(Get-Command test).Definition
Indrek
źródło
5
(Get-Command Test).Definition

W ten sposób zwykle otrzymuję definicje.

EBGreen
źródło
W$profile function def ($funcname) { (Get-Command $funcname).Definition }
Kanion Kolob
3

Bieżące odpowiedzi będą działać tylko w przypadku funkcji utworzonych lokalnie. Możesz na przykład zobaczyć definicję funkcji rodzimych, takich jak Get-EventLog.

Aby wyświetlić listę wszystkich dostępnych funkcji, możesz uruchomić:

Get-ChildItem Function::

Każde z nich można przekazać do ${function:myFn}lub(Get-Command myFn).Definition

Jeśli chcesz zajrzeć do funkcji natywnych, możesz uruchomić ten kod :

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