programing

함수 내에서 PowerShell 함수 이름을 검색하는 방법이 있습니까?

bestprogram 2023. 8. 25. 23:49

함수 내에서 PowerShell 함수 이름을 검색하는 방법이 있습니까?

예:

function Foo { 
    [string]$functionName = commandRetrievesFoo
    Write-Host "This function is called $functionName"
}

출력:

PS > Foo
This function is called foo

사용할 수 있습니다.$MyInvocation현재 실행 중인 작업에 대한 유용한 정보가 포함되어 있습니다.

function foo {
    'This function is called {0}.' -f $MyInvocation.MyCommand
}

함수에 있을 때는 자동 변수 $PSCmdLet에 액세스할 수 있습니다.

이 변수는 현재 실행 중인 cmdlet에 대한 많은 정보를 포함하는 매우 유용한 변수입니다.

우리의 시나리오에서 우리는 일부 재귀에 대한 현재 함수의 이름과 정의를 원했습니다.함수가 PowerShell 모듈 내에 있기 때문에 $MyInvocation이 null이었습니다.

그러나 PSCmdLet 개체에는 필요한 모든 정보를 포함하고 시나리오를 실행할 수 있는 "MyInvocation" 속성이 있습니다.

예: $PSCmdlet.나의 초대.제 명령입니다.Name = $PSCmdlet 함수의 이름입니다.나의 초대.제 명령입니다.정의 = 함수의 정의

만만하다.

function Get-FunctionName ([int]$StackNumber = 1) {
    return [string]$(Get-PSCallStack)[$StackNumber].FunctionName
}

기본적으로 예제의 Get-FunctionName은 호출한 함수의 이름을 가져옵니다.

Function get-foo () {
    Get-FunctionName
}
get-foo
#Reutrns 'get-foo'

StackNumber 매개 변수를 늘리면 다음 함수 호출의 이름을 가져옵니다.

Function get-foo () {
    Get-FunctionName -StackNumber 2
}
Function get-Bar  () {
    get-foo 
}
get-Bar 
#Reutrns 'get-Bar'

Get-PSCallStack옵션은 한 번만 작동하는 것 같습니다. 스크립트 본문에서 함수를 호출할 때 처음에는 스크립트 이름을 검색하지만 두 번째에는 텍스트 " "를 검색합니다.

언급URL : https://stackoverflow.com/questions/3689543/is-there-a-way-to-retrieve-a-powershell-function-name-from-within-a-function