รับความหมายของฟังก์ชั่นและ echo รหัส


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

นั่นคือวิธีที่ฉันมักจะได้คำจำกัดความ


ใน$profile function def ($funcname) { (Get-Command $funcname).Definition }
Kolob Canyon

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.