Dapatkan definisi fungsi dan gema kode

18

Saya telah mendefinisikan fungsi dinamis di PowerShell, seperti ini:

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

Lalu saya bisa mengetik testdan menjalankan fungsi itu, memipakannya ke perintah lain, dll. Cukup praktis.

Apakah ada cara saya bisa mendapatkan definisi perintah? Bisakah saya mengulang kode untuk fungsi saya test? (Tanpa harus kembali melalui sejarah saya ke tempat saya mendefinisikannya?)

Jeff B
sumber

Jawaban:

21

Untuk fungsi yang disebut test:

$function:test

Atau jika nama fungsi berisi tanda hubung (mis. test-function):

${function:test-function}

Kalau tidak:

(Get-Command test).Definition
Indrek
sumber
5
(Get-Command Test).Definition

Begitulah biasanya saya mendapatkan definisi.

EBGreen
sumber
In$profile function def ($funcname) { (Get-Command $funcname).Definition }
Kolob Canyon
3

Jawaban saat ini hanya akan berfungsi untuk fungsi yang telah dibuat secara lokal. Anda dapat, misalnya, melihat definisi fungsi asli seperti Get-EventLog.

Untuk daftar semua fungsi yang tersedia, Anda dapat menjalankan:

Get-ChildItem Function::

Semua ini dapat diteruskan ke ${function:myFn}atau(Get-Command myFn).Definition

Jika Anda ingin mengintip fungsi asli, Anda dapat menjalankan kode ini :

$metadata = New-Object system.management.automation.commandmetadata (Get-Command Get-EventLog)
[System.management.automation.proxycommand]::Create($MetaData) | out-file C:\Get-EventLog.ps1
KyleMit
sumber