Войти

Показать полную графическую версию : [решено] Обработка ошибок


DJ Mogarych
13-11-2019, 12:27
Добрый день, коллеги!

Есть строчка подключения к серверу Exchange:
Import-PSSession (New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exch1.domain.ru/PowerShell/ -Authentication Kerberos) -DisableNameChecking
Всего серверов три штуки: exch1, exch2 и exch3.

Как сделать, чтобы при ошибке подключения к exch1 пробовало подключаться к exch2, и при ошибке - к exch3?

Можно ли как-то сделать здесь if-then? Не хочется вложенный try-catch делать, это громоздко и вроде как не рекомендуется.

Elven
13-11-2019, 14:22
try-catch делать лучше всегда, но не для этого. :)
пошика под рукой нет, поэтому приблизительно на глаз дожна сработать такая стрёмная конструкция:
$pssession = (New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exch1.domain.ru/PowerShell/ -Authentication Kerberos) & if (!$?) {
$pssession = (New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exch2.domain.ru/PowerShell/ -Authentication Kerberos) & if (!$?) {
$pssession = (New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exch3.domain.ru/PowerShell/ -Authentication Kerberos) & if (!$?) {
$pssession = $true}
}}
if ($pssession) {write-host "к третьему тоже не подключлся :("} else {
Import-PSSession ($pssession) -DisableNameChecking }

DJ Mogarych
13-11-2019, 16:50
Спасибо! $? - это круто!

Переделал в такой вариант:

$c = 1
do {$pssession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://exch$($c).domain.ru/PowerShell/ -Authentication Kerberos -ErrorAction SilentlyContinue; $c++}
until ($? -or $c -gt 3)
if (!$?) {write-host -fore red "Не удалось подключиться ни к одному серверу Exchange"; sleep 2; exit}
Import-PSSession $pssession -DisableNameChecking -ErrorAction SilentlyContinue
if (!$?) {write-host -fore red "Ошибка импорта удалённой сессии Powershell"; sleep 2; exit}




© OSzone.net 2001-2012