Как поймать «Отказано в доступе», используя plink из сценария powershell

955
igor

У меня есть скрипт powershell, который вызывает следующую команду:

plink -batch -ssh $defUser@$srv -pw $defPassword -m $executeCommandFile

Проблема в том, что $ defPassword не всегда одинаков / корректен. Как я могу поймать ошибку Access denied от plink?

Что-то вроде этого:

if (plink -batch -ssh $defUser@$srv -pw $defPassword -ne "Access denied")  \\execute -m $executeCommandFile else \\use different $defPassword(for example $defPassword2) and then execute 

Подумайте, это как попробовать \ поймать, но с plink используется пароль

0

1 ответ на вопрос

0
JosefZ

"Access is denied"сообщение появляется в потоке ошибок. Вы можете использовать операторы перенаправления Windows PowerShell, например, следующим образом:

$aux = . plink -batch -ssh $defUser@$srv -pw $defPassword -m $executeCommandFile *>&1 if ( $aux -match '^Access.*denied' ) { ### the specified string found: use different $defPassword } else { ### success $aux ### show plink results } 

Обратите внимание, что 2>&1может быть достаточно:

  • *>&1отправляет все выходные данные ( *) в поток вывода успеха;
  • 2>&1отправляет ошибки ( 2) и успех вывода ( 1) в поток вывода успеха.