首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取发生写入错误的行号。

获取发生写入错误的行号。
EN

Stack Overflow用户
提问于 2014-12-26 07:14:14
回答 1查看 1.8K关注 0票数 1

考虑一下脚本

代码语言:javascript
复制
$someComplexCondition = $false

if ($someComplexCondition)
{
    Write-Error -Message "Some complex condition"
}
else
{
    Write-Error -Message "Other complex condition"
}

当我运行它时,上面写着

代码语言:javascript
复制
C:\Dev> .\MyScript.ps1
C:\Dev\MyScript.ps1 : Other complex condition
At line:1 char:15
+ .\MyScript.ps1 <<<<
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,MyScript.ps1

我注意到,写错误总是将自己报告为,在line:1中,根据堆栈跟踪,它看起来像是#1行,因为它是从shell调用的,而更有趣的是char:15,因为

代码语言:javascript
复制
".\MyScript.ps1 ".Length -eq 15

如果我们更改文件名,此char:15将相应更改。

问题是在发生错误时如何获得实际的行。

在我们的例子中,我想得到行:9

EN

回答 1

Stack Overflow用户

发布于 2014-12-26 11:26:57

当出现实际错误时,由Powershell生成的对象类型为ErrorRecord:

代码语言:javascript
复制
$error[0] | Get-Member

    TypeName: System.Management.Automation.ErrorRecord

当您使用这个与写错误相同的ErrorRecord时,您不会得到一个对象:

代码语言:javascript
复制
$myError = Write-Error -ErrorRecord $Error[0]
PS C:\> $MyError | Get-Member
gm : You must specify an object for the Get-Member cmdlet.
At line:1 char:12
+ $MyError | gm
+            ~~
    + CategoryInfo          : CloseError: (:) [Get-Member], InvalidOperationException
    + FullyQualifiedErrorId : NoObjectInGetMember,Microsoft.PowerShell.Commands.GetMemberCommand

所以,现在,我们知道写错误不会给我们提供任何我们以后可以重用的东西。

您可以使用“抛出”语句,而不是:

代码语言:javascript
复制
$someComplexCondition = $false

if ($someComplexCondition)
{
    Throw "Some complex condition"
}
else
{
    Throw "Other complex condition"
}

然后,在运行脚本时,错误会给出“抛出”语句开头的行号和字符号:

代码语言:javascript
复制
C:\Test-Error.ps1
Other complex condition
At C:\Test-Error.ps1:9 char:5
+     Throw "Other complex condition"
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (Other complex condition:String) [], RuntimeException
    + FullyQualifiedErrorId : Other complex condition

这里是9号线。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27654028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档