Estoy investigando un problema de rendimiento en el campo. Normalmente, simplemente no hay suficiente ancho de banda para que mi aplicación sea rápida. Normalmente, la forma en que funciona es que solicito a la Terminal (a través de VNC o WebEx) ingresar a la máquina del usuario, luego abro la ventana de comandos y ejecuto PING en el servidor para ver la latencia.
Este procedimiento lleva bastante tiempo (por ejemplo, a veces la gente ni siquiera está en su escritorio, etc...).
¿Hay alguna manera de ejecutar PING de forma remota desde la máquina del usuario al servidor sin involucrar al usuario?
¿O hay una mejor alternativa?
Respuesta1
Hay un programa que he usado llamadoCentral de escritorio gratuita. Le permite conectarse al símbolo del sistema de una computadora remota y ejecutar lo que desee. Mientras la máquina esté encendida, esta herramienta puede ser de gran ayuda. También tiene muchas otras opciones/herramientas que puede utilizar desde computadoras remotas sin involucrar la participación de otros usuarios.
Respuesta2
Si la máquina del usuario tiene una dirección IP pública (no está detrás de NAT), puede hacer ping a su máquina desde el servidor.
Respuesta3
Me gusta más Test-Connection de 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
Naturalmente, puedes utilizar un nombre de computadora en lugar de un sitio web. Sugiero esta solución porque proporciona tiempo y, por tanto, la capacidad de medir la latencia.
Respuesta4
No estoy seguro de si se respondió al OP, así que enviaré lo que desarrollé después de buscar sin éxito la misma respuesta.
Utilizo dos enfoques diferentes para esto, para probar las conexiones entre los servidores Exchange y el servidor que será designado en el argumento 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]}
}
Espero que esto ayude a alguien.