PowerShell测试连接-TimeToLive错误?

PowerShell测试连接-TimeToLive错误?,powershell,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 + T

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

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
命令按预期工作!而执行
Get-Help测试连接
则很有挑战性地表明
-TimeToLive
确实是一个有效的参数


哪里出错了?

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

在您的局域网中,TTL为6可能不足以到达目的地


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

好的,经过几周不间断的工作,昨晚我在回家之前重新启动了笔记本电脑

今天早上,令人惊讶的是
-TimeToLive
又开始工作了

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

。。。但是我仍然想知道,以前发生过什么事情导致错误…

这个答案是基于我自己的实验。如果我错了,一定要告诉我。
这个答案很有说服力

tl;dr

  • -TimeToLive
    ,不管怎么说(仍然从PSv5.1和[1]开始) ),不是以秒为单位的超时,而是数据包在被视为过期之前可以进行的最大跳数

    • 因此,它类似于ping.exe的
      -i
      参数
    • testconnection
      -TimeToLive
      -
      80
      的默认值提供了一个线索,表明它不是以秒为单位的超时,因为这会过高
    • 测试连接
      ping.exe
      的真正基于时间的
      -w
      超时参数没有等价物
  • 在这种情况下,模糊的错误消息(
    过滤器spec的某些部分或特定于提供程序的缓冲区通常出现问题)很可能是由于TTL(跃点计数限制)值较低,导致数据包在传输过程中过期

    • ping.exe
      将在该事件中报告更有用的
      TTL在运输过程中过期

TTL(生存时间)在实践中是一个用词不当的词,这是一个在IPv6中已被纠正的问题,正如我们所知道的(我的重点):

理论上,在IPv4下,生存时间以秒为单位,尽管每个通过数据报的主机必须将TTL至少减少一个单位实际上,TTL字段在每个跃点上减少一个。为了反映这种做法,在IPv6中将字段重命名为hop limit

因此,围绕TTL真正代表的内容出现混淆是可以理解的,但不幸的是,
测试连接
文档中的错误信息多年来没有得到纠正



[1] 我已打开以跟踪问题。

使用-TimeToLive参数对我来说效果很好。你能在另一台计算机上检查这个吗?@ravikanth它肯定能在其他计算机上工作。IIRC,它过去工作正常,但现在不工作了。原因可能是什么,我想知道…当测试
localhost
时是否会出现相同的错误?。。。不确定,请参阅我的自我回答。作为旁白:如果问题出在不支持的参数上,您将看到错误消息(不是):
找不到与参数名称“…”匹配的参数。
;当前的错误不是语法错误,而是运行时错误。PowerShell中的
-TimeToLive
参数不是IP数据包的TTL字段。它应该正确地命名为
-TimeOut
,但名称已被卡住。@pepoluan mmmhh。。。我想是TTL字段(是ping-I,与ping.exe的-w参数无关:等待每个回复的超时时间(以毫秒为单位))。如果
ping.exe-i6 TARGET
给出相同的结果,你能试试吗?我现在不在电脑旁(它是我办公室的工作站),所以我无法尝试ping。然而,我肯定
-TimeToLive
在这种情况下意味着“超时”:
获取帮助测试连接
这样说。此外,错误消息不是关于无法到达目标,而是关于某种语法错误。看到您的答案也可以测试连接。。。这不是一个有用的测试:)你在笔记本电脑上观察到这一点的事实进一步表明,
-TimeToLive
不是以秒为单位的超时,而是最大跳数:也许在你重新启动时,你碰巧连接到了另一个网络,目标主机现在恰好可以通过6个或更少的跃点到达。好吧,这是很久以前的事了,但我记得当时我是用电缆连接到我公司的网络的。尽管我有权连接到WiFi(由高层管理人员使用),但我始终使用电缆(千兆以太网FTW)。我认为这是一个简单的情况,Windows就是Windows。不需要依赖很久以前的内存:找到一个服务器,
ping-i1-n1
返回“TTL在传输过程中过期”(实际上是瞬间,而不是1秒之后),并将其与
测试连接-TimeToLive 1-Count 1
并行-您将看到
ping
测试连接
并行失败。不断增加TTL值,以查看这两个命令最终是否开始使用
Test-Connection -ComputerName TARGET
Test-Connection -ComputerName TARGET -Count 2