小编Kol*_*iat的帖子

Powershell - 检索内部异常以输出(socketException)

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

我有一个简单的函数,它使用以下命令检查域名[System.Net.DNS]::GetHostByName()

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

Exception calling "GetHostByName" with "1" argument(s): "No such host is known"

然后我想捕获错误并围绕它做一些修饰

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

No such host is known

没有别的了——我喜欢这一点,我希望它是出现的消息而不是错误。

当我将上述内容放入 catch 子句时,一切正常。

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

自己尝试一下:

  • 使用“错误”名称导致 SocketException
  • 看看$Error[0].Exception.InnerException会抛出什么
  • 看看"$($Error[0].Exception.InnerException)"会抛出什么

第一个命令给出了,No such host is known而第二个命令给出了完整的错误。请解释一下为什么会发生这种情况?

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

No such host is known: $computername。有没有“简单”的方法来做到这一点,而不是做该死的正则表达式?

.net error-handling powershell exception

5
推荐指数
1
解决办法
1万
查看次数

PowerShell force [int]包装(IP到Long转换)

这是一个简单的问题,因为我在PowerShell中对数学有点新意

我需要在PowerShell中创建一个转换器,将IP转换为Long.它适用于较低的值,但在较高的值上它会导致整数溢出.

[int]$a = Read-Host "First bit of IP address"
[int]$b = Read-Host "2nd bit of IP address"
[int]$c = Read-Host "3rd bit of IP address"
[int]$d = Read-Host "4th bit of IP address"

$a *= 16777216
$b *= 65536
$c *= 256
$base10IP = $a + $b + $c + $d
Write-Host $base10IP
Run Code Online (Sandbox Code Playgroud)

如果我输入一些低int的IP地址,如10.10.10.10(168430090),可以正常工作

但是有些情况会导致Int溢出.如果[int]达到最大值并且为我提供负值,我希望PowerShell回绕.

我作为服务台工作,我支持的软件之一需要长期的IP,包括负值.

它在PowerShell中可行吗?

如果您需要更多详细信息或有些不明确的地方,请告知.

亚历克斯

ip int powershell

1
推荐指数
1
解决办法
1826
查看次数

标签 统计

powershell ×2

.net ×1

error-handling ×1

exception ×1

int ×1

ip ×1