Ermitteln Sie die Definition der Funktion und geben Sie den Code ein

15

Ich habe eine dynamische Funktion in Powershell definiert:

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

Dann kann ich einfach tippen test und führen Sie diese Funktion aus, leiten Sie sie an andere Befehle weiter usw. Ziemlich praktisch.

Gibt es eine Möglichkeit, die Definition des Befehls zu erhalten? Kann ich den Code für meine Funktion auslesen? test? (Ohne meine Geschichte dahin zurückverfolgen zu müssen, wo ich sie definiert habe?)

Jeff Bridgman
quelle

Antworten:

17

Für eine aufgerufene Funktion test:

$function:test

Oder wenn der Funktionsname einen Bindestrich enthält (z. test-function ):

${function:test-function}

Alternative:

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

So bekomme ich normalerweise Definitionen.

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

Die aktuellen Antworten funktionieren nur für Funktionen, die lokal erstellt wurden. Sie können zum Beispiel die Definition von systemeigenen Funktionen wie sehen Get-EventLog.

Für eine Liste aller verfügbaren Funktionen können Sie Folgendes ausführen:

Get-ChildItem Function::

Jede davon kann übergeben werden ${function:myFn} oder (Get-Command myFn).Definition

Wenn Sie native Funktionen betrachten möchten, können Sie [den folgenden Code] [1] ausführen:

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