関数の定義を取得し、コードをエコーする

関数の定義を取得し、コードをエコーする

次のように、PowerShell で動的関数を定義しました。

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

testその後、その関数を入力して実行し、それを他のコマンドなどにパイプすることができます。非常に便利です。

コマンドの定義を取得する方法はありますか? 関数のコードをエコー出力できますかtest? (定義した場所まで履歴を遡る必要はありませんか?)

答え1

関数 の場合test:

$function:test

または、関数名にハイフンが含まれている場合(例test-function:):

${function:test-function}

あるいは:

(Get-Command test).Definition

答え2

(Get-Command Test).Definition

それが私が通常定義を得る方法です。

答え3

これらの両方のアプローチは、${function:myFn}ローカル(Get-Command myFn).Definitionに作成された関数に対してのみ機能します。

また、ネイティブ関数の定義も見ることができますGet-EventLogCommandMetadataそしてProxyCommandコマンドのSystem.Management.Automation名前空間は次のようになります:

using namespace System.Management.Automation

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

参照:PowerShell コマンドレットのソースコードを見ることはできますか?

関連情報