我可以測量另外兩台計算機之間的 PING 時間嗎?

我可以測量另外兩台計算機之間的 PING 時間嗎?

我正在調查該領域的一個性能問題。通常,沒有足夠的頻寬讓我的應用程式運行得很快。通常,它的工作方式是,我要求終端(透過 VNC 或 WebEx)進入使用者的計算機,然後打開命令視窗並對伺服器運行 PING 以查看延遲。

這個過程非常耗時(例如,有時人們甚至不在辦公桌前,等等...)。

有沒有辦法讓我在不涉及用戶的情況下從用戶的電腦遠端運行 PING 到伺服器?

或有更好的選擇嗎?

答案1

我用過一個程式叫桌面中央免費。它允許您連接到遠端電腦的命令提示字元並運行您想要的任何內容。只要機器啟動了,這個工具就能幫上大忙。它還具有許多其他選項/工具,您可以從遠端電腦執行這些操作,而無需涉及其他使用者輸入。

答案2

如果使用者的電腦有公用 IP 位址(不在 NAT 後面),您可以從伺服器 ping 他們的電腦。

答案3

我更喜歡 PowerShell 的測試連接

Test-Connection computerperformance.co.uk 

Source        Destination     IPV4Address      Bytes    Time(ms) 
------        -----------     -----------      -----    -------- 
WIN7          computerperf... 72.26.108.9      32       148      
WIN7          computerperf... 72.26.108.9      32       149      
WIN7          computerperf... 72.26.108.9      32       149      
WIN7          computerperf... 72.26.108.9      32       149    

當然,您可以使用電腦名稱而不是網站。我建議這個解決方案,因為它提供了時間,因此能夠測量延遲。

答案4

不確定OP是否得到回答,所以我將在未成功搜尋相同答案後提交我所開發的內容。

我使用兩種不同的方法來測試 Exchange 伺服器與將在 New-MailboxExportRequest -FilePath 參數中指定的伺服器之間的連接。

#invoke-command (test-connection)
function Get-TestConnectionResponseTime
{
#returns a hash of min, max, avg ping times
param($Pingee,$Pinger)
$TCScript="
    `$result = Test-Connection $Pingee
    `$min=(`$result|Measure-Object -Minimum -Property responsetime).Minimum
    `$max=(`$result|Measure-Object -Maximum -Property responsetime).Maximum
    `$avg=(`$result|Measure-Object -Average -Property responsetime).Average
    @{Min=`$min;Max=`$max;Avg=`$avg}
    "

$CxtScript = $ExecutionContext.InvokeCommand.NewScriptBlock($TCScript)
try{
    Invoke-Command -ComputerName $Pinger -ScriptBlock $CxtScript -ErrorAction Stop}
catch [System.Management.Automation.RuntimeException]{
    return "Probably a firewall restriction: " + $error[0].FullyQualifiedErrorId}
catch{
    return "From catch-all error trap: " + $error[0].FullyQualifiedErrorId}
}

#start-process (psexec -> ping)
function Get-PingResponseTime
{
#uses start-process to run ping from remote to remote, returns a hash of min, max, avg ping times

# this one is slow and clunky, but psexec is allowed though some of the firewalls I contend with, 
# and invoke-command isn't. To collect the output in the script, I had to write it to a log and 
# pick it up afterwards (by watching for the last line of the output to appear in the log file)

param($Pingee,$Pinger)
$argumentlist = "$Pinger ping $Pingee"
$timestamp = Get-Date
$psexecID = Start-Process -FilePath psexec -ArgumentList ("\\" + $argumentlist) -NoNewWindow -RedirectStandardOutput \\MyComputer\c$\temp\pinglog.txt -PassThru #-Wait
Write-Host "Started process" $psexecID.Name
#wait for the remote process to finish
While(Get-Process -ComputerName $Pinger | ?{$_.Name -eq $psexecID.Name}){
    Write-Host "." -NoNewline 
    }
#wait for the completed log file on my local system
Write-Host "Waiting for $pinger to return results..."
while(!((Get-Content C:\temp\pinglog.txt) -match "Average = ")){
    Write-Host "." -NoNewline
    Start-Sleep -Seconds 1
    }
Write-Host " ah, there they are!"
#parse the ping output
$pingtimes = ((Get-Content C:\temp\pinglog.txt) -match "Average = ").trim() -split ", " | %{($_ -split " = ")[1].trim("ms")}
return @{Min=$pingtimes[0];Max=$pingtimes[1];Avg=$pingtimes[2]}
}

希望這對某人有幫助。

相關內容