为什么PowerShell中的异常消息中的函数名为空?如何正确获得它?

为什么PowerShell中的异常消息中的函数名为空?如何正确获得它?,powershell,powershell-3.0,Powershell,Powershell 3.0,我试图从异常消息中获取脚本名、函数名、行号和消息。除了函数名,我还可以取其他名称。 我的代码如下 function dividebyzero { try { 1/0 } catch { throw $_ } } 上述函数位于文件ExceptionSample.Psm1中 Import-Module C:\Scripts\ExceptionSample.Psm1 function Write-ErrorLog { Param(

我试图从异常消息中获取脚本名、函数名、行号和消息。除了函数名,我还可以取其他名称。 我的代码如下

function dividebyzero {
    try {
        1/0
    } catch {
        throw $_
    }
}
上述函数位于文件
ExceptionSample.Psm1

Import-Module C:\Scripts\ExceptionSample.Psm1

function Write-ErrorLog {
    Param(
        [System.Management.Automation.ErrorRecord]$ErrorInfo
    )
    $formatstring = "[Script ({0}), function {1} , Line {2}, Message {3}]" 
    if ($ErrorInfo.InvocationInfo.ScriptName) {
        # this is done to correctly recieve the original error back from Pester mocks
        $scriptname = $(Split-Path -Path $ErrorInfo.InvocationInfo.ScriptName -Leaf)
    }
    $fields = $scriptname,
              $ErrorInfo.InvocationInfo.MyCommand.Name,
              $ErrorInfo.InvocationInfo.ScriptLineNumber,
              $ErrorInfo.Exception.Message

    $formatstring -f $fields    
}

try {
    dividebyzero
} catch {
    Write-ErrorLog -ErrorInfo $_        
}
输出除函数名外

[Script (ExceptionSample.Psm1), function , Line 5, Message Attempted to divide by zero.] [脚本(ExceptionSample.Psm1),函数,第5行,消息试图除以零。]
少了什么?有其他方法获取函数名吗?

不要使用
try/catch
来抛出错误记录。我想您需要解析
$ErrorInfo.ScriptStackTrace
字符串来获取函数名。我认为PowerShell实际上不会记录函数名,只有例外。