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

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

5
(Get-Command Test).Definition

So bekomme ich normalerweise Definitionen.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.