【问题标题】:Test-Connection with -asjob and -delay使用 -asjob 和 -delay 进行测试连接
【发布时间】: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


【解决方案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
}

【讨论】:

    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2017-07-11
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多