【发布时间】:2015-10-12 17:26:51
【问题描述】:
使用 IP 地址运行 Test-Connection 比使用服务器主机名运行相同的命令花费的时间要长得多。
但是;如果我添加 -quiet 参数,那么性能大致相同(IP 速度快一点,正如您所料)。
使用Measure-Command这个异常不会出现;大概是输出的一些怪癖没有显示。
以下代码更准确地反映了所看到的异常情况:
$begin=(get-date).ticks;test-connection '123.45.67.89'; $a=((get-date).ticks - $begin)
$begin=(get-date).ticks;test-connection 'MyHostName'; $b=((get-date).ticks - $begin)
$a-$b
同事在他们的机器上重现了同样的问题。
问题:是否有人知道可能导致此问题的原因? 即我怀疑这是一个错误(并且已经报告了它),但这意味着PowerShell可能会根据是否显示输出而以不同的方式工作/导致类似量子的效果;所以它不仅仅是按顺序运行命令,而是在幕后进行一些(去)优化。
我的环境
操作系统:MS Windows 7 Pro SP1
$PSVersionInfo:
Name Value
---- -----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.18444
BuildVersion 6.3.9600.16406
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
MS Connect 错误
【问题讨论】:
-
忠告:不要像这样使用 Get-Date 进行取证测量。使用
[System.Diagnostics.Stopwatch]::StartNew()。我能够复制顺便说一句 -
这是猜测(尚未进行网络跟踪),但可能是 PowerShell 尝试对 IP 进行反向查找以解析为
Destination字段中的主机名输出 -
@MathiasR.Jessen;好叫声;我想知道在 ping 发生之前是否就是这种情况,但无法弄清楚为什么/如何隐藏输出会影响它......如果它只在输出结果时这样做,尽管这对所看到的更有意义。奇怪的是他们在每次迭代时都进行查找而不是缓存它,但大概是有原因的(也许是在 ping 之间 DNS 发生变化的情况下)?
-
找到罪魁祸首,稍后会上传截图和进一步解释
标签: performance powershell ping