Я исследую проблему производительности в полевых условиях. Обычно для моего приложения просто не хватает пропускной способности, чтобы оно работало быстро. Обычно это работает так: я запрашиваю Terminal (через VNC или WebEx) на машине пользователя, затем открываю командное окно и запускаю PING на сервере, чтобы увидеть задержку.
Эта процедура занимает довольно много времени (например, иногда люди даже не находятся за своим рабочим столом и т. д.).
Есть ли способ запустить PING удаленно с компьютера пользователя на сервер без участия самого пользователя?
Или есть лучшая альтернатива?
решение1
Я использовал программу, которая называетсяDesktop Central Бесплатно. Он позволяет вам подключаться к командной строке удаленного компьютера и запускать все, что вы хотите. Пока машина включена, этот инструмент может очень помочь. Он также имеет много других опций/инструментов, которые вы можете делать с удаленных компьютеров без участия другого пользователя.
решение2
Если у машины пользователя публичный IP-адрес (она не находится за NAT), вы можете выполнить ping-запрос на его машину с сервера.
решение3
Мне больше нравится 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
Естественно, вы можете использовать ComputerName вместо веб-сайта. Я предлагаю это решение, потому что оно дает время, а значит, и возможность измерить задержку.
решение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]}
}
Надеюсь, это кому-нибудь поможет.