2017-02-10 1 views
0

Это может быть просто случай, когда мой google-fu работает неправильно, но я пытаюсь получить точное время отклика между набором серверов Windows. Я могу использовать следующий тип в Powershell:Powershell: время отклика между серверами Windows

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.

Любая помощь приветствуется!

+1

Как вы отметили, вы почти наверняка измеряете неправильную вещь, поскольку вы измеряете продолжительность выполнения командлета плюс различные накладные расходы. Вы можете немного приблизиться к металу, извлекая время состояния ping из возвращаемого значения, но это все еще измеряет результаты протокола, который, вероятно, не имеет отношения к вашей реализации с точки зрения переданных данных и других соображений. Wireshark захватывает и анализ вашего протокола в действии будет более реалистичной мерой. –

+0

Ах, да, я просто пытался понять, имеет ли разница в использовании вывода Test-Connection (который находится в мс), а также делает это, но также использует временную метку до и после имеет огромную разницу. Если бы было всего несколько микросекунд, то meh, но оказалось, что это больше, чем ожидалось :) Я еще не углубился в WireShark, но знаете ли вы, знаете ли, что временные метки, используемые в нем, могут измеряться в микросекундах? – MagneTism

ответ

0

Вы можете получить время отклика так:

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

и вы можете использовать TimeSpan класса, чтобы иметь дело с различным timespans

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

Надеется, что это помогает.

+0

Спасибо, это помогает, но я не вижу, что это будет меньше, чем миллисекунды. Я ищу способ получить число в микросекундах. Я начинаю думать, что это потому, что команда Test-Connection может измерять только в миллисекундах ... Любые другие идеи? – MagneTism

+0

@MagneTism: Я не думаю, что у Dot net есть что-то, что можно преобразовать в наносеку. Я буду обновлять, если есть способ. Принятие ответа было бы очень заметным. –

+0

В миллисекундах насчитывается 10 000 клещей, но я не думаю, что это измерение (эффективно пинг), скорее всего, будет эквивалентно тому, что он делает, поскольку выбор протокола будет иметь драматический эффект на этот временной шкале. https://msdn.microsoft.com/en-us/library/system.timespan.ticks(v=vs.110).aspx –