Obtenha a definição da função e faça eco do código

Obtenha a definição da função e faça eco do código

Eu defini uma função dinâmica no PowerShell, assim:

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

Então posso simplesmente digitar teste executar essa função, canalizando-a para outros comandos, etc.

Existe uma maneira de obter a definição do comando? Posso repetir o código da minha função test? (Sem ter que voltar na minha história até onde eu a defini?)

Responder1

Para uma função chamada test:

$function:test

Ou se o nome da função contiver um hífen (por exemplo: test-function):

${function:test-function}

Alternativamente:

(Get-Command test).Definition

Responder2

(Get-Command Test).Definition

É assim que normalmente obtenho definições.

Responder3

Ambas as abordagens - ${function:myFn}ou (Get-Command myFn).Definition- funcionarão apenas para funções que foram criadas localmente.

Você também pode ver a definição de funções nativas como Get-EventLog(por exemplo). com oCommandMetadataeProxyCommandcomandos noSystem.Management.Automationespaço para nome assim:

using namespace System.Management.Automation

$cmd = Get-Command Get-EventLog
$meta = New-Object CommandMetadata($cmd)
$src = [ProxyCommand]::Create($meta)
$src | Write-Output

Veja também:Podemos ver o código-fonte dos cmdlets do PowerShell?

informação relacionada