Получить определение функции и вывести код

Получить определение функции и вывести код

Я определил динамическую функцию в PowerShell, вот так:

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

Затем я могу просто ввести testи запустить эту функцию, передав ее другим командам и т. д. Довольно удобно.

Есть ли способ получить определение команды? Могу ли я вывести код для моей функции test? (Без необходимости возвращаться по истории к тому месту, где я ее определил?)

решение1

Для функции с названием test:

$function:test

Или если имя функции содержит дефис (например, test-function):

${function:test-function}

Альтернативно:

(Get-Command test).Definition

решение2

(Get-Command Test).Definition

Именно так я обычно получаю определения.

решение3

Оба эти подхода ${function:myFn}будут (Get-Command myFn).Definitionработать только для функций, созданных локально.

Вы также можете увидеть определение собственных функций, например Get-EventLog(например). с помощьюCommandMetadataиProxyCommandкоманды вSystem.Management.Automationпространство имен, подобное этому:

using namespace System.Management.Automation

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

Смотрите также:Можно ли увидеть исходный код командлетов PowerShell?

Связанный контент