Этот код эффективен? - PullRequest
       0

Этот код эффективен?

0 голосов
/ 07 июня 2018

У меня есть скрипт для проверки работоспособности серверов, у меня отлично работает скрипт, мне просто интересно, можно ли его оптимизировать больше, или он просто великолепен?Он ищет серверы, которые начинаются с определенного префикса, в данном случае «PreSvr *». Если он обнаруживает, что один из них запущен и работает, он останавливает обработку остальных и сообщает имя первого найденного.Если он обнаружит, что ни один из этих серверов не ответил, он скажет мне об этом.

$found = $null
$status = $false
$SvrName = "PreSvr*"
$GetSvrs = (Get-ADComputer -Filter {Name -like $SvrName}).Name
foreach ($Svr in $GetSvrs)
{
    try {$Status = (Get-Service -ComputerName $Svr -Name WinRM -ErrorAction SilentlyContinue).Status} catch {$Status = $false}
    IF ($Status) {$Found = $Svr;break}
}

IF ($Found) {$Svr} Else {"No Server Responded"}

1 Ответ

0 голосов
/ 07 июня 2018

Вы пытаетесь получить статус статуса сервиса WinRM, если это цель - приведенный ниже код должен работать.Вы можете прервать работу внутри самого блока try.

$found = $null
$winRMServiceStatus = $null
$serverReachable = $false
$srvName = "*"
$getSvrs = (Get-ADComputer -Filter {Name -like $srvName}).Name
foreach ($svr in $getSvrs) {
    try {
        $winRMServiceStatus= (Get-Service -ComputerName $svr -Name WinRM -ErrorAction SilentlyContinue).Status
        $serverReachable = $true
        $found = $svr
        break;
    }
    catch {
        $serverReachable = $false
    }
}

if($serverReachable) {"found $found with WinRM status $winRMServiceStatus"} else{"No server responded"}

В вашем примере вы пытаетесь получить доступ к $ srv вне цикла foreach, где он недоступен.

Я смог быстро протестировать его в своей лаборатории, дайте мне знать, как он работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...