I've defined a dynamic function in powershell, like this:
> function test { dir -r -fil *.vbproj | ft directory, name }
Then I can just type test and run that function, piping it to other commands, etc. Pretty handy.
Is there a way I can get the definition of the command? Can I echo out the code for my function test? (Without having to go back through my history to where I defined it?)
3 Answers
For a function called test:
$function:test
Or if the function name contains a hyphen (eg. test-function):
${function:test-function}
Alternatively:
(Get-Command test).Definition
(Get-Command Test).Definition
That is how I normally get definitions.
Both of these approaches - ${function:myFn} or (Get-Command myFn).Definition - will only work for functions that have been created locally.
You also can see the definition of native functions like Get-EventLog (e.g.). with the CommandMetadata and ProxyCommand commands in the System.Management.Automation namespace like this:
using namespace System.Management.Automation
$cmd = Get-Command Get-EventLog
$meta = New-Object CommandMetadata($cmd)
$src = [ProxyCommand]::Create($meta)
$src | Write-Output
See Also: Can we see the source code for PowerShell cmdlets?