Powershell 使用-asjob和-delay测试连接

Powershell 使用-asjob和-delay测试连接,powershell,delay,Powershell,Delay,当将测试连接作为作业运行时,它似乎完全忽略了-delay参数 例如,当使用“-delay 5”和“-count 10”时,预计这大约需要50秒才能完成 当使用Measure命令进行测试时,这确认了当作为作业运行时,情况并非如此,因为您可以看到作业完成所需的时间少于1秒,但当不作为作业运行时,所需的时间约为预期的50秒 Measure-Command {Test-Connection google.co.uk -Count 10 -Delay 5 -AsJob | where {$_.Name =

当将测试连接作为作业运行时,它似乎完全忽略了-delay参数

例如,当使用“-delay 5”和“-count 10”时,预计这大约需要50秒才能完成

当使用Measure命令进行测试时,这确认了当作为作业运行时,情况并非如此,因为您可以看到作业完成所需的时间少于1秒,但当不作为作业运行时,所需的时间约为预期的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命令是错误的,但不管您是否使用以下代码段:

$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命令的原因是试图量化我的观察结果


我将测试连接作为一个作业来运行,以每隔1秒执行120次ping,因此我希望该作业在大约120秒内不可用。但我可以在几秒钟内返回作业并输出结果。这不是我所期望的

那是因为你实际上并不是在等待作业完成。只需几毫秒即可启动单个作业并返回
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
}

运行命令
help about_Jobs
并阅读说明。就在那里,它说,“当您启动后台作业时,命令提示符会立即返回,即使作业需要较长的时间才能完成。您可以在作业运行时不间断地继续在会话中工作。”换句话说,
-AsJob
异步执行命令,所以
Measure命令
看到它马上就完成了。我已经更新了这个问题。