SSH + PowerShell, как сохранить значения переменных между вызовами команд?
На удаленной машине с Windows 10 установил OpenSSH Server, настроил его, чтобы он отрабатывал через PowerShell вместо Cmd, все работает прекрасно, но вот понадобилось выполнить не отдельную команду, а небольшой скрипт, в котором необходимо использовать переменные. Такой код в одну строку работает: $v = "Hello"; Write-Host $v, а если отдельно посылать $v = "Hello" и Write-Host $v - то нет, потому что $v не сохраняет значение между отдельными командами.
Я знаю, что в PowerShell есть команды вроде `New-Session`, но насколько я понял, их нужно использовать на той машине, с которой подключаешься, при том, что подключаться нужно именно из PowerShell. А я подключаюсь с помощью SSH, и, видимо, тут эта магия недоступна. Поправьте, если ошибаюсь.
не замечал такой проблемы. Видимо вы что-то недоговариваете.
Если вы подключились к удаленной сессии и там отрабатываете команды, переменные должны сохраняться - сессия та же.
Если же вы выполняете команды каждый раз через ssh -c - то это логично, сессия каждый раз новая
MaxKozlov, вы правы, наверное я упустил важный момент про то, что делаю это не из консоли на локальном компьютере, а из PHP-скрипта с помощью пакета phpseclib/SSH2. Только что проверил, из консоли все работает, значения сохраняются. Видимо дело в механизме, который используется в этом клиенте. Попробую другой.
сергей кузьмин, да, собственно, решения конкретно моего вопроса я не нашел, просто понял, что exec - это действительно не то, что мне нужно в данной ситуации. Библиотека поддерживает интерактивную работу с SSH с помощью read/write методов, но там свои нюансы, вывод клиент получает полный, с исходной командой, с промптом оболочки, все это нужно чистить, чтобы вычленить отдельно вывод последней отправленной команды. Вдобавок нужно вычистить ANSI-коды, а нормального готового решения на PHP я не нашел. Поэтому вышел из ситуации другим способом - сделал возможность отправлять по SFTP исходный код многострочного скрипта и запускать его через exec, получая назад его вывод. Потом завернул это в абстракцию и получил желаемый результат.