В пакетном сценарии DOS я запускаю одну команду на удаленном компьютере (также с Windows) с помощью plink. Ранее эта команда выполнялась только на локальном компьютере и полагалась на код возврата для определения успеха. Есть ли способ легко получить эту информацию через plink?
получить код возврата от plink?
Ответы (2)
Это невозможно с plink
. Текущий консенсус заключается в том, чтобы удаленный сценарий echo
перенес свой код выхода в файл журнала, а затем использовал pscp
для передачи файла журнала на локальный компьютер.
См. http://fixunix.com/ssh/74235-errorlevel-capturing-plink. HTMLа>.
с плинком 0.66
C:\Code>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" bob@myserver exit 42
C:\Code>echo %ERRORLEVEL%
42
Также для беспокойства @John Wiersba о том, когда соединение не может быть установлено, это, похоже, исправлено.
C:\CodeMisc>echo Y | "C:\Program Files (x86)\PuTTY\plink.exe" bob@garbageservername exit 42
Unable to open connection:
Host does not exist
C:\Code>echo %ERRORLEVEL%
1
Также обратите внимание на конвейер echo Y
... это позволяет вам автоматически принимать отпечаток пальца сервера (по меньшей мере, немного опасно ... но наш сервер входа сбалансирован по нагрузке, поэтому вы всегда получаете разные отпечатки пальцев :()
Однако, как отмечает @LeonBloy, у plink все еще есть некоторые условия подключения, которые возвращают нулевой код выхода. Если вы знаете свой диапазон кодов выхода и у вас нет хорошего способа связаться с Windows через файл. Вы можете либо +3 к коду выхода (если вы знаете, что код выхода никогда не будет == 253-255), либо вы можете применить побитовое ИЛИ (я бы предложил exit $(($?|128))
- в bash).
Или, если вам не нужен точный код выхода, вы можете вернуть 2 в случае успеха и ноль в случае неудачи. Таким образом, код выхода, отличный от двух, будет указывать на сбой. В bash это будет: echo $((($?==0) << 1))
. Это было бы, безусловно, самым надежным решением общего назначения, но вы должны убедиться, что ваш код выхода зарегистрирован для возможности отладки.
>plink.exe -batch -ssh -i key.ppk [email protected] Using username "pi". Server refused our key >echo %ERRORLEVEL% 0
- person leonbloy; 12.01.2017