【问题标题】:Powershell: response times between Windows ServersPowershell:Windows 服务器之间的响应时间
【发布时间】:2017-06-28 08:43:54
【问题描述】:

这可能只是我的 google-fu 无法正常工作的情况,但我正在尝试获取一组 Windows 服务器之间的准确响应时间。我可以在 Powershell 中使用以下类型:

Test-Connection -ComputerName google.com -count 1

但是,这只会给您以毫秒为单位的响应时间:

Source        Destination     IPV4Address      IPV6Address                              Bytes    Time(ms) 
------        -----------     -----------      -----------                              -----    -------- 
ComputerName  google.com      172.217.26.14                                             32       26       

我们正在使用的应用程序需要非常快的响应时间(低于 1 毫秒),所以如果我作为一个简单的外行可以在微秒内测量它,那就太好了。我尝试了类似以下的方法:

$startTime = Get-Date
$testConnection = Test-Connection -ComputerName google.com -count 1
$stopTime = Get-Date
$responseTime = $stopTime - $startTime

但这从 20-30 毫秒到 120 毫秒,大概是因为我的机器必须读取日期并计算差异,这确实需要几毫秒。

我假设某种形式的应用程序(可能是 WireShark?)可以在微秒内测量,但我找不到这个。我知道,例如 Active Directory 登录时间戳记录甚至可以低至纳秒,因此它应该在 Powershell 脚本框架内是可行的。

【问题讨论】:

  • 正如您所指出的,您几乎毫无疑问地测量了错误的东西,因为您测量的是 cmdlet 执行的时间长度加上各种开销。您可以通过从返回值中检索 ping 状态时间来更接近金属,但这仍然是衡量协议的结果,就传输的数据和其他考虑因素而言,该协议可能与您的实现无关。 Wireshark 在行动中捕获和分析您的协议将是一个更现实的衡量标准。
  • 啊,是的,我只是想看看使用 Test-Connection 输出(以毫秒为单位)以及这样做以及使用之前和之后的时间戳的区别是巨大的差异。如果它只有几微秒那么嗯,但事实证明它比预期的要大:) 我还没有深入了解 WireShark,但你会知道其中使用的时间戳是否可以以微秒为单位测量吗?

标签: windows powershell server


【解决方案1】:

您可以像这样获得响应时间

Test-Connection www.google.com -Count 4 | Measure-Object -Property ResponseTime -Average

你可以使用 TimeSpan 类来处理不同的时间跨度

[timespan]::fromseconds((Test-Connection www.google.com -Count 4 | Measure-Object -Property ResponseTime -Average).average)

希望对你有帮助。

【讨论】:

  • 谢谢,这确实有帮助,但我看不到这会低于毫秒。我正在寻找一种以微秒为单位获取数字的方法。我开始认为这是因为 Test-Connection 命令行开关只能以毫秒为单位进行测量......还有其他想法吗?
  • @MagneTism:我认为 Dot net 没有任何东西可以将其转换为纳秒。如果有办法,我会更新。接受答案将是非常可观的
  • 一毫秒有 10,000 个 Ticks,但我认为这种测量(实际上是 ping)可能与他所做的任何事情都不相同,因为协议选择会对那个时间尺度产生巨大影响。 msdn.microsoft.com/en-us/library/…
  • 我认为没有更好的方法来捕获响应时间。因此,如果有的话,请突出显示。为了转换成纳秒或更多,不考虑蜱虫。
  • 问题不在于获取或输出 ping 结果,Test-Connection 命令行开关完美地做到了这一点。而且,它通过 $testConnection.ResponseTime 为我提供了以毫秒为单位的时间,因此使用 [timespan] 并不是真的 必要的。我开始认为第 3 方应用程序是必要的,但我无法找到一个以微秒为单位测量连接性的应用程序。
【解决方案2】:

我发现的可行解决方案是使用 Get-Date 的 -Format 参数和以下内容:

Get-Date -Format "yyyy-MM-dd HH.mm.ss:fffffff"

这使您可以将时间精确到每个单独的滴答声,即百万分之一秒。更多信息:https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多