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

18

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

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

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

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

Джефф Б
источник

Ответы:

21

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

$function:test

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

${function:test-function}

В качестве альтернативы:

(Get-Command test).Definition
Индрек
источник
5
(Get-Command Test).Definition

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

EBGreen
источник
В$profile function def ($funcname) { (Get-Command $funcname).Definition }
Колоб Каньон
3

Текущие ответы будут работать только для функций, которые были созданы локально. Вы можете, например, посмотреть определение нативных функций, например Get-EventLog.

Для получения списка всех доступных функций вы можете запустить:

Get-ChildItem Function::

Любой из них может быть передан ${function:myFn}или(Get-Command myFn).Definition

Если вы хотите посмотреть на встроенные функции, вы можете запустить этот код :

$metadata = New-Object system.management.automation.commandmetadata (Get-Command Get-EventLog)
[System.management.automation.proxycommand]::Create($MetaData) | out-file C:\Get-EventLog.ps1
KyleMit
источник