PowerShell Test-Connection -TimeToLive错误?

时间:2012-06-25 08:46:19

标签: powershell

我不知道发生了什么,但每次我输入以下命令:

Test-Connection -ComputerName TARGET -TimeToLive 6

我收到以下错误:

Test-Connection : Testing connection to computer 'TARGET' failed: Problem with some part of the filterspec or providerspecific buffer in general
At line:1 char:16
+ Test-Connection <<<<  -ComputerName TARGET -TimeToLive 6
    + CategoryInfo          : ResourceUnavailable: (TARGET:String) [Test-Connection], PingException
    + FullyQualifiedErrorId : TestConnectionException,Microsoft.PowerShell.Commands.TestConnectionCommand

有趣的是,如果我没有-TimeToLive参数,例如:

Test-Connection -ComputerName TARGET
Test-Connection -ComputerName TARGET -Count 2

命令按预期工作!并Get-Help Test-Connection诱人地表明-TimeToLive 确实是有效参数。

我哪里出错了?

3 个答案:

答案 0 :(得分:2)

发出的每个IP数据包都有一个TTL字段,该字段设置为相对较高的数字(在LAN中ping的情况下为128)。当数据包遍历网络时,每个路由器经过的TTL字段减少一个;当TTL下降到0时,路由器丢弃该数据包。 IP规范说TTL应设置为60(尽管ping数据包为255)。这样做的主要目的是使数据包不会永远存在于网络中,并且当它被认为“丢失”时最终会死亡。

在您的局域网中,可能无法使用TTL为6来到达目的地。

在我的环境中,在两跳子网上只有1次ping的TTL会返回错误,而且是正确的,我只有一个核心路由器/交换机用于多个vlan,本地路由器每个不同的子网/域。

答案 1 :(得分:1)

这个答案是基于我自己的实验。如果我错了,请告诉我 这个答案依据CB.'s helpful answer

<强> TL;博士

  • -TimeToLive,尽管Test-Connection documentation说的是什么(仍然是PSv5.1和also in the source-code repository on GitHub [1] ),中的超时,但数据包在被视为过期之前可以进行最大跳数

    • 因此,它类似于ping.exe&n; -i <TTL>参数。
    • Test-Connection -TimeToLive的默认值 - 80 - 提供 超时秒< / em>,因为那会过高。
    • Test-Connection不等同于ping.exe真正基于时间的-w <ms>超时参数。
  • 在这种情况下,模糊错误消息problem with some part of the filterspec or providerspecific buffer in general很可能源于传输过期的数据包,因为TTL较低 (跳数限制)值。

    • ping.exe会在该事件中报告更有帮助的TTL expired in transit

TTL(时间 -to-Live)在实践中是一个用词不当 ,这是一个已在IPv6中得到纠正的问题,如Wikipedia告诉我们(强调我的):

  

理论上,在IPv4下,生存时间是在 中测量的,尽管每个传递数据报的主机必须减少TTL至少一个单位。 在实践中,TTL字段每一跳减少一个为了反映这种做法,字段重命名为 IPv6中的跃点限制

虽然可以理解的是,围绕TTL真正代表的问题引起了混淆,但遗憾的是,Test-Connection文档中的错误信息多年来一直没有得到纠正。

[1]我已经打开an issue there来跟踪问题。

答案 2 :(得分:-1)

好的,经过几个星期的不间断工作,我在回家之前的昨晚重启了我的笔记本电脑。

今天早上,令人惊讶的是-TimeToLive再次发挥作用!!

所以,我的主要“无法使用-TimeToLive”的问题已经解决了......

...但我仍然想知道,-TimeToLive导致错误之前发生了什么......