Holen Sie sich die Funktionsdefinition und geben Sie den Code wieder

Holen Sie sich die Funktionsdefinition und geben Sie den Code wieder

Ich habe in Powershell eine dynamische Funktion wie folgt definiert:

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

Dann kann ich testdie Funktion einfach eingeben und ausführen, sie an andere Befehle weiterleiten usw. Ziemlich praktisch.

Gibt es eine Möglichkeit, die Definition des Befehls abzurufen? Kann ich den Code für meine Funktion ausgeben test? (Ohne in meinem Verlauf dorthin zurückkehren zu müssen, wo ich ihn definiert habe?)

Antwort1

Für eine Funktion namens test:

$function:test

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

${function:test-function}

Alternative:

(Get-Command test).Definition

Antwort2

(Get-Command Test).Definition

So erhalte ich normalerweise Definitionen.

Antwort3

Beide Ansätze ${function:myFn}funktionieren (Get-Command myFn).Definitionnur für lokal erstellte Funktionen.

Sie können auch die Definition von nativen Funktionen wie Get-EventLog(zB) sehen mit demCommandMetadataUndProxyCommandBefehle imSystem.Management.AutomationNamespace wie folgt:

using namespace System.Management.Automation

$cmd = Get-Command Get-EventLog
$meta = New-Object CommandMetadata($cmd)
$src = [ProxyCommand]::Create($meta)
$src | Write-Output

Siehe auch:Können wir den Quellcode für PowerShell-Cmdlets sehen?

verwandte Informationen