gpt4 book ai didi

.net - Powershell - 检索输出的内部异常(socketException)

转载 作者:行者123 更新时间:2023-12-02 23:14:00 26 4
gpt4 key购买 nike

我最近开始深入研究 Powershell 中的错误处理,我注意到一些我并不真正理解的东西(我不知道这种行为是从哪里来的)。

我有一个简单的函数,它使用 [System.Net.DNS]::GetHostByName()

检查域名

如果这个变量被传递给一个不存在的主机,它会抛出一个讨厌的错误

使用“1”个参数调用“GetHostByName”的异常:“没有这样的主机”

然后我想捕获错误并对其进行一些修饰

$Error[0].Exception.InnerException 给出了一个非常好的输出:

没有这样的主机是已知的

没有别的 - 我喜欢它,我希望它是出现的消息而不是错误。

当我将上面的内容放在 catch 子句中时,一切正常。

但是,当我看到放置分号、使用 Write-host 或以任何方式将其转换为“字符串”值时,会弄乱 innerException,我感到非常惊讶。

亲自尝试一下:

  • 使用“错误的”名称引发 SocketException
  • 查看 $Error[0].Exception.InnerException 抛出的内容
  • 看看 "$($Error[0].Exception.InnerException)" 抛出什么

第一个命令给出了 No such host is known 而第二个命令给出了完整的错误。请解释为什么会这样?

最后,我希望弹出错误消息:

没有这样的主机:$computername。有没有“简单”的方法来做到这一点而不是做该死的正则表达式?

最佳答案

我认为区别在于 Powershell 在不同情况下调用哪种方法从对象获取输出。

当你只是通过使用将它输出到管道时

$error[0].exception.innerexception

它正在调用 .GetBaseException() 方法,该方法仅输出 Message 属性。

当您将其转换为 [string] 以与 Write-Host 一起使用时,它会调用 .tostring() 方法,该方法会输出所有错误信息。

关于.net - Powershell - 检索输出的内部异常(socketException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24651213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com