【发布时间】:2017-11-20 17:36:08
【问题描述】:
在将 Test-Connection 作为作业运行时,它似乎完全忽略了 -delay 参数。
例如,当使用“-delay 5”和“-count 10”时,预计这需要大约 50 秒才能完成。
当使用 Measure-Command 进行测试时,这证实了当作为作业运行时,情况并非如此,正如您所见,该作业花费了不到一秒的时间完成,但当不作为作业运行时,大约需要 50 秒,正如预期的那样.
Measure-Command {Test-Connection google.co.uk -Count 10 -Delay 5 -AsJob | where {$_.Name = $Target}}
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 26
Ticks : 263563
TotalDays : 3.05049768518519E-07
TotalHours : 7.32119444444444E-06
TotalMinutes : 0.000439271666666667
TotalSeconds : 0.0263563
TotalMilliseconds : 26.3563
Measure-Command {Test-Connection google.co.uk -Count 10 -Delay 5}
Days : 0
Hours : 0
Minutes : 0
Seconds : 45
Milliseconds : 445
Ticks : 454456692
TotalDays : 0.000525991541666667
TotalHours : 0.012623797
TotalMinutes : 0.75742782
TotalSeconds : 45.4456692
TotalMilliseconds : 45445.6692
我已经测试了使用“-count 1000”和“-asjob”,即使这对执行时间的影响也很小。
我环顾四周,但找不到任何解释,并且很好奇是否有人可以解释为什么会发生这种行为?
此外,是否有另一种方法可以使用 -delay 参数调用测试连接,以与我的脚本的其余部分并行运行,最后检索测试连接的结果?
更新 #1
我可以从回复中看出我使用 Measure-Command 是错误的,但不管你是否采取以下 sn-p:
$start = Get-date
$target = "google.co.uk"
$count = 10
Test-Connection $target -Count $count -Delay 5 -AsJob | where {$_.Name = $target}
$result = Wait-Job $Target | Receive-Job
Remove-Job $target
$result
$end = Get-date
""
Write-host "Completed in: $($end - $start)"
这个输出
Source Destination IPV4Address IPV6Address
------ ----------- ----------- -----------
SURFACE google.co.uk 216.58.204.3
SURFACE google.co.uk 216.58.204.3
SURFACE google.co.uk 216.58.204.3
SURFACE google.co.uk 216.58.204.3
SURFACE google.co.uk 216.58.204.3
SURFACE google.co.uk 216.58.204.3
SURFACE google.co.uk 216.58.204.3
SURFACE google.co.uk 216.58.204.3
SURFACE google.co.uk 216.58.204.3
SURFACE google.co.uk 216.58.204.3
Completed in: 00:00:00.1170733
而
$start = Get-date
$target = "google.co.uk"
$count = 10
Test-Connection $target -Count $count -Delay 5
$end = Get-date
""
Write-host "Completed in: $($end - $start)"
返回
SURFACE google.co.uk 216.58.206.131
SURFACE google.co.uk 216.58.206.131
SURFACE google.co.uk 216.58.206.131
SURFACE google.co.uk 216.58.206.131
SURFACE google.co.uk 216.58.206.131
SURFACE google.co.uk 216.58.206.131
SURFACE google.co.uk 216.58.206.131
SURFACE google.co.uk 216.58.206.131
SURFACE google.co.uk 216.58.206.131
SURFACE google.co.uk 216.58.206.131
Completed in: 00:00:45.4695467
我不确定我的方法是否存在一些根本缺陷。
也许我最初的问题并没有想象的那么清楚,我使用 Measure-Command 的原因是为了尝试量化我的观察结果。
我将测试连接作为一项作业运行,以每隔 1 秒执行 120 次 ping,所以我预计该作业大约不会可用。 120 秒。但我可以在几秒钟内返回作业并输出结果。这不是我所期待的。
【问题讨论】:
-
运行命令
help about_Jobs并阅读说明。就在那里,它说:“当您启动后台作业时,命令提示符会立即返回,即使该作业需要较长时间才能完成。您可以在作业运行时继续在会话中工作而不会中断。”换句话说,-AsJob异步执行命令,所以Measure-Command看到它立即完成。 -
我已经更新了问题。
标签: powershell delay