私は現場でパフォーマンスの問題を調査しています。通常、私のアプリを高速化するには帯域幅が足りません。通常、動作方法は、ユーザーのマシンにターミナル (VNC または WebEx 経由) を要求し、コマンド ウィンドウを起動してサーバーに PING を実行して遅延を確認するというものです。
この手順にはかなり時間がかかります (たとえば、人がデスクにいない場合もあります)。
ユーザーを介さずに、ユーザーのマシンからサーバーにリモートで PING を実行する方法はありますか?
それとももっと良い代替案があるのでしょうか?
答え1
私が使ったことがあるプログラムがありますデスクトップセントラル無料リモート コンピューターのコマンド プロンプトに接続して、必要な操作を実行できます。マシンが起動している限り、このツールは大いに役立ちます。また、他のユーザー入力を必要とせずにリモート コンピューターから実行できる他のオプションやツールも多数あります。
答え2
ユーザーのマシンにパブリック IP アドレスがある場合 (NAT の背後にない場合)、サーバーからそのマシンに ping を実行できます。
答え3
私はPowerShellのTest-Connectionが好きです
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
もちろん、Web サイトの代わりに ComputerName を使用することもできます。このソリューションは時間を提供し、レイテンシを測定できるため、お勧めします。
答え4
OP が回答されたかどうかわからないので、同じ回答を検索して失敗した後に開発したものを提出します。
私はこれに 2 つの異なるアプローチを使用して、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]}
}
これが誰かの役に立つことを願います。