2016-12-22 4 views
0

Мне нужно проверить три возможных состояния удаленного компьютера: в сети, без сервера RPC или без ответа. Я использую блок try-catch, чтобы поймать условие без завершения, когда пульт находится в сети, но сервер RPC недоступен. Я понимаю, почему следующий код не возвращает статус для No RPC Server, но я не знаю, как я должен действовать. Любая помощь очень ценитсяКак вернуть значение переменной из инструкции Catch?

$Status = "" 
$hostname = Read-host("Enter Computer Name") 
if (test-connection $hostname -Count 1 -ErrorAction SilentlyContinue){ 
    $Status = "Online" 
    Try { 
     $x = gwmi -Class win32_ComputerSystem -ComputerName $hostname -ErrorAction Stop 
     } 
    Catch{ 
     $Status = "No RPC" 
     Continue 
    } 
} 
Else{ 
    $Status = "No Response" 
} 
$Status 
+2

Выньте Продолжить. –

+0

Попробуйте '$ используя: Status =" No RPC "' –

ответ

1

Если вам не нужно делать каких-либо другую обработку в функции нет никакой реальной причины, чтобы использовать переменную $Status вообще. Просто сделайте Return "No RPC" внутри вашего блока Catch (я бы тоже сделал то же самое внутри вашего Else для согласованности, но это полностью зависит от ваших предпочтений).

+0

Спасибо за быстрое решение. Я довольно новичок в этом и ценю помощь. – Martin23mm

+0

с удовольствием помогаем, как правило, избегать установки переменной, чтобы вернуть ее на следующем шаге, она создает некоторые нечетные проблемы синтаксиса (как вы видели здесь), а также отнимает память, что не имеет значения 99% время в PowerShell работает, но большое дело в других 1%, или если вы решите перейти на более традиционные языки программирования. –

Смежные вопросы