为什么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实际上不会记录函数名,只有例外。