Попробуйте поймать не поймать - PullRequest
1 голос
/ 24 июня 2019

Когда я использую try{} catch{} ping для этих серверов, я получаю только ошибку командлета вместо перехвата в try-catch ... В чем здесь проблема?

foreach($s in $servers)
{
    try{Test-Connection $s.server -Count 1}
    catch{ Write-Host "error"}
}

Ответы [ 3 ]

7 голосов
/ 24 июня 2019

По умолчанию командлеты генерируют ошибки, не заканчивающиеся сценариями, которые не обрабатывает try / catch. Вы можете изменить это поведение, используя автоматическую переменную $ErrorActionPreference или общий параметр -ErrorAction:

# or `$ErrorActionPreference = 'Stop'`
foreach ($s in $servers) {
    try {
        Test-Connection -TargetName $s.server -Count 1 -ErrorAction Stop
    }
    catch {
        "$_"
    }
}
3 голосов
/ 24 июня 2019

Test-Connection не выдает « Terminating Error », когда что-то идет не так. Это означает, что try / catch не сработал. Вы можете решить эту проблему, добавив -ErrorAction Stop к команде Test-Connection.

foreach($s in $servers)
{
    try{
        Test-Connection $s.server -Count 1 -ErrorAction Stop
    }catch{
        "error"
    }
}
0 голосов
/ 24 июня 2019

Пожалуйста, проверьте имя заголовка во входном файле.try {Test-Connection $ s.server -Count 1}

...