使用-asjob和-delay进行测试连接

时间:2017-11-20 17:36:08

标签: powershell delay

将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的使用是错误的,但不管您是否采用以下代码段:

$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秒但我可以在几秒钟内返回作业并输出结果。这不是我所期待的。

1 个答案:

答案 0 :(得分:1)

那是因为你实际上并没有等待工作完成。只需几毫秒就可以启动单个作业并返回PSJob个对象。

与:比较:

Measure-Command {
    Test-Connection google.co.uk -Count 10 -Delay 5 -AsJob |Receive-Job -Wait
}
# and
Measure-Command {
    Test-Connection google.co.uk -Count 10 -Delay 5
}