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

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

5
(Get-Command Test).Definition

W ten sposób zwykle otrzymuję definicje.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.