none
Определение ближайшего сервера RRS feed

  • Вопрос

  • Доброго времени суток. Задача следующая, есть несколько серверов необходимо проверить соединение к каждому и выбрать тот у кого будет наименьший пинг. 

    Заранее спасибо

    18 августа 2017 г. 10:11

Ответы

  • Попробуйте так

    $comps = "server1, server2, server3, server4" foreach ($comp in $comps) { $test = (Test-Connection -ComputerName $comp -Count 4 | measure-Object -Property ResponseTime -Average).average $response = ($test -as [int])

    $object = New-Object –TypeNamePSObject $object | Add-Member –MemberTypeNoteProperty –Name Computername –Value $comp

    $object | Add-Member –MemberTypeNoteProperty –Name Response –Value $response

    $object

    } | sort response -descending


    The opinion expressed by me is not an official position of Microsoft


    • Предложено в качестве ответа Alexander RusinovModerator 18 августа 2017 г. 11:20
    • Помечено в качестве ответа Alexander RusinovModerator 18 августа 2017 г. 11:20
    • Снята пометка об ответе Omni_Vidente 18 августа 2017 г. 11:37
    • Отменено предложение в качестве ответа Omni_Vidente 18 августа 2017 г. 11:37
    • Изменено Vector BCOModerator 18 августа 2017 г. 15:44
    • Предложено в качестве ответа Vector BCOModerator 18 августа 2017 г. 16:16
    • Помечено в качестве ответа Alexander RusinovModerator 21 августа 2017 г. 19:42
    18 августа 2017 г. 11:12
    Модератор
  • $comps = "server1, server2, server3, server4"
    $pc = $comps | Sort { (Test-Connection $_ | measure -Property ResponseTime -Average).average} | Select -First 1

    21 августа 2017 г. 9:02
    Отвечающий

Все ответы

  • Пока у меня получается просто протестировать список компов и вывести значения 

    $comps = "server1, server2, server3, server4"
    foreach ($comp in $comps)
    {
    	
    	$test = (Test-Connection -ComputerName $comp -Count 4 | measure-Object -Property ResponseTime -Average).average
    	$response = ($test -as [int])
    write-host $comp $response
    } 

    18 августа 2017 г. 10:57
  • Я страшное скажу- наименьший пинг не значит, что сервер менее загружен, или сеть (latency) менее высокая. Что сделать-то хотите в двух словах, откройте тайну? А то пахнет костылями пока.
    18 августа 2017 г. 11:09
  • Попробуйте так

    $comps = "server1, server2, server3, server4" foreach ($comp in $comps) { $test = (Test-Connection -ComputerName $comp -Count 4 | measure-Object -Property ResponseTime -Average).average $response = ($test -as [int])

    $object = New-Object –TypeNamePSObject $object | Add-Member –MemberTypeNoteProperty –Name Computername –Value $comp

    $object | Add-Member –MemberTypeNoteProperty –Name Response –Value $response

    $object

    } | sort response -descending


    The opinion expressed by me is not an official position of Microsoft


    • Предложено в качестве ответа Alexander RusinovModerator 18 августа 2017 г. 11:20
    • Помечено в качестве ответа Alexander RusinovModerator 18 августа 2017 г. 11:20
    • Снята пометка об ответе Omni_Vidente 18 августа 2017 г. 11:37
    • Отменено предложение в качестве ответа Omni_Vidente 18 августа 2017 г. 11:37
    • Изменено Vector BCOModerator 18 августа 2017 г. 15:44
    • Предложено в качестве ответа Vector BCOModerator 18 августа 2017 г. 16:16
    • Помечено в качестве ответа Alexander RusinovModerator 21 августа 2017 г. 19:42
    18 августа 2017 г. 11:12
    Модератор
  • Я страшное скажу- наименьший пинг не значит, что сервер менее загружен, или сеть (latency) менее высокая. Что сделать-то хотите в двух словах, откройте тайну? А то пахнет костылями пока.

    Есть несколько серверов расположенных в разных точках мира. Пользователь должен подключаться к ближайшему к нему серверу, сейчас приходиться каждый раз в ручную выяснять к какому ему лучше подключится.

    Т.е. мне нужно чтобы при запуске было определено какой сервер ближе и затем уже выполнялись нужные операции с этим сервером


    • Изменено Omni_Vidente 18 августа 2017 г. 11:27
    18 августа 2017 г. 11:22
  • Попробуйте так

    $comps = "server1, server2, server3, server4" foreach ($comp in $comps) { $test = (Test-Connection -ComputerName $comp -Count 4 | measure-Object -Property ResponseTime -Average).average $response = ($test -as [int])

    $object = New-Object –TypeNamePSObject $object | Add-Member –MemberTypeNoteProperty –Name Computername –Value $comp

    $object | Add-Member –MemberTypeNoteProperty –Name Response –Value $response

    } | sort response -descending


    The opinion expressed by me is not an official position of Microsoft


    ERROR: + } | sort response -descending
    ERROR: +   ~
    ERROR: Пустой элемент канала не допускается.


    • Изменено Omni_Vidente 18 августа 2017 г. 11:25
    18 августа 2017 г. 11:23
  • пока нужный результат получается таким скриптом:

    $ping = foreach ($comp in $comps)
    {
    	
    	$test = (Test-Connection -ComputerName $comp -Count 4 | measure-Object -Property ResponseTime -Average).average
    	$response = ($test -as [int])
    	
    	$object = New-Object –TypeName PSObject
    	$object | Add-Member –MemberType NoteProperty –Name Computername –Value $comp
    	
    	$object | Add-Member –MemberType NoteProperty –Name Response –Value $response
    	Write-Output $object
    }
    $server = (($ping | sort response)[0]).computername

    • Предложено в качестве ответа Vector BCOModerator 18 августа 2017 г. 16:16
    18 августа 2017 г. 12:06
  • Любите вы усложнять

    Я сверху поправил скрипт

    Если вам нужен не порядок серверов по близости, а лишь один - то есть такая конструкция

    .... | select computername -first 1



    The opinion expressed by me is not an official position of Microsoft



    18 августа 2017 г. 15:44
    Модератор
  • У меня ни в какую не хочет работать 

    $comps = "s-asia.****.com", "s-europe.***.org", "s-europe.***.com", "s-us.***.com"
          foreach ($comp in $comps)
    {
    	
    	$test = (Test-Connection -ComputerName $comp -Count 4 | measure-Object -Property ResponseTime -Average).average
    	$response = ($test -as [int])
    $object = New-Object –TypeName PSObject
    $object | Add-Member –MemberType NoteProperty –Name Computername –Value $comp
    $object | Add-Member –MemberType NoteProperty –Name Response –Value $response
    $object
    
    } | select computername -first 1

    строка:11 знак:3
    + } | select computername -first 1
    +   ~
    Пустой элемент канала не допускается.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : EmptyPipeElement



    • Изменено Omni_Vidente 18 августа 2017 г. 17:38
    18 августа 2017 г. 17:37
  • $comps = "server1, server2, server3, server4"
    $pc = $comps | Sort { (Test-Connection $_ | measure -Property ResponseTime -Average).average} | Select -First 1

    21 августа 2017 г. 9:02
    Отвечающий