
Я определил динамическую функцию в 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?