Czy mogę zmierzyć czas PING między dwoma innymi komputerami?

1

Badam problem perf w tej dziedzinie. Zazwyczaj nie ma wystarczającej przepustowości, aby moja aplikacja była szybka. Zazwyczaj działa to tak, że pytam Terminal (za pomocą VNC lub WebEx) na maszynę użytkownika, a następnie podkręcam okno poleceń i uruchamiam PING na serwerze, aby zobaczyć opóźnienie.

Ta procedura jest dość czasochłonna (np. Czasami ludzie nie są nawet przy biurku itp.).

Czy istnieje sposób, aby uruchomić PING zdalnie z komputera użytkownika na serwer bez angażowania użytkownika?

Czy jest lepsza alternatywa?

AngryHacker
źródło

Odpowiedzi:

1

Użyłem programu o nazwie Desktop Central Free . Pozwala połączyć się z wierszem poleceń komputera zdalnego i uruchamiać, co chcesz. Dopóki maszyna jest uruchomiona, to narzędzie może bardzo pomóc. Posiada również wiele innych opcji / narzędzi, które można wykonać ze zdalnych komputerów bez udziału innych użytkowników.

Zawroty głowy
źródło
1

Jeśli komputer użytkownika ma publiczny adres IP (nie znajduje się za NAT), możesz pingować jego komputer z serwera.

Hugh Allen
źródło
1

Raczej podoba mi się Test-Connection 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    

Oczywiście możesz użyć ComputerName zamiast strony internetowej. Sugeruję to rozwiązanie, ponieważ daje ono czas, stąd możliwość pomiaru opóźnienia.

Guy Thomas
źródło
0

Nie jestem pewien, czy PO otrzymał odpowiedź, więc prześlę to, co opracowałem po bezskutecznym poszukiwaniu tej samej odpowiedzi.

Używam dwóch różnych podejść do tego, aby przetestować połączenia między serwerami Exchange a serwerem, który zostanie wyznaczony w argumencie 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]}
}

Mam nadzieję, że to komuś pomoże.

mdj
źródło