例如:
function Foo {
[string]$functionName = commandRetrievesFoo
Write-Host "This function is called $functionName"
}
输出:
PS > Foo
This function is called foo
答案 0 :(得分:28)
您可以使用$MyInvocation
,其中包含有关当前执行内容的一些有用信息。
function foo {
'This function is called {0}.' -f $MyInvocation.MyCommand
}
答案 1 :(得分:5)
当您在某个功能中时,您可以访问自动变量$ PSCmdLet。
这是一个非常有用的变量,它包含有关当前正在执行的cmdlet的大量信息。
在我们的场景中,我们想要一些递归的当前函数的名称和定义。 $ MyInvocation为null,因为该函数位于PowerShell模块中。
但是,PSCmdLet对象上有一个“MyInvocation”属性,其中包含所需的所有信息并允许我们的场景运行。
e.g。 $ PSCmdlet.MyInvocation.MyCommand.Name =函数的名称 $ PSCmdlet.MyInvocation.MyCommand.Definition =函数的定义
答案 2 :(得分:2)
Get-PSCallStack
选项似乎只工作一次:从脚本主体调用函数时,第一次检索脚本名称,但第二次它将检索文本''
答案 3 :(得分:0)
易。
For i = 2 To lstrow
Exam_1_Date = Worksheets("Data").Range("AW" & i)
Exam_2_Date = Worksheets("Data").Range("BA" & i)
If Exam_1_Date > Exam_2_Date Then
Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("F" & i & ":H" & i).Value
Worksheets("PPDCI").Range("F" & j).Value = Exam_1_Date
ElseIf Exam_1_Date < Exam_2_Date Then
Worksheets("PPDCI").Range("A" & j & ":C" & j).Value = Worksheets("Data").Range("F" & i & ":H" & i).Value
Worksheets("PPDCI").Range("F" & j).Value = Exam_2_Date
Else
Worksheets("PPDCI").Range("F" & j).Value = "CAN NOT DETERMINE"
End If
j = j + 1
Next i
默认情况下,示例中的 Get-FunctionName 将获取调用它的函数的名称。
function Get-FunctionName ([int]$StackNumber = 1) {
return [string]$(Get-PSCallStack)[$StackNumber].FunctionName
}
增加 StackNumber 参数将获得下一个函数调用的名称。
Function get-foo () {
Get-FunctionName
}
get-foo
#Reutrns 'get-foo'