2014-01-30 4 views
2

У меня возникли проблемы с выполнением команд в удаленном сеансе PowerShell, которые требуют взаимодействия с пользователем.Выполнение интерактивной команды в удаленном сеансе Powershell не работает

Пример: Я вхожу удаленный сеанс

Enter-PSSession -ComputerName mobius 

На этой сессии я выполнить команду, которая запрашивает пароль:

[mobius]: PS C:\Windows\system32> & 'c:\Program Files (x86)\Putty\plink.exe' merlin -l joe 

[email protected]'s password: 
c:\Program Files (x86)\Putty\plink.exe : Using username "plakat". 
    + CategoryInfo   : NotSpecified: (Using username "plakat".:String) [], RemoteException 
    + FullyQualifiedErrorId : NativeCommandError 

Последние две строки отображаются красным цветом. Кажется, есть две проблемы.

Проблема 1: plink.exe пишет текст «Использование имени пользователя» plakat «'to stderr. Вероятно, это вызывает сообщение об ошибке. Могу ли я это подавить? (труба stderr в stdout или что-то подобное.)

Задача 2: Процесс завершается в точке, где я должен ввести пароль. Я также могу воспроизвести это с помощью других команд, таких как

[mobius]: PS C:\Windows\system32> cmd /c date 

Это не позволяет мне вводить дату. Обе команды работают, если я запускаю их в локальном PowerShell. Ни одна из проблем 1 или 2 не показывает в этом случае.

ответ

0

Интерактивные команды консоли Windows не поддерживаются в сеансе удаленной PowerShell. Я знаю, что это звучит глупо, но в настоящее время это так (с PowerShell v4.0).

Большинство утилит командной строки поддерживают некоторую форму автоматизации, будь то передача или передача значений в качестве аргументов, поэтому внимательно изучите инструменты, которые вы используете. Конечно, это зависит от конкретного случая. Нет простого способа перехватить интерактивное приглашение на удаленном конце любым универсальным способом.

+0

Спасибо. Хм. Я боялся этого. В моем примере я могу использовать plink с аутентификацией с открытым ключом, чтобы обойти подсказку с паролем. Но это только меняет мою проблему. Потому что моя конечная цель - открыть интерактивную сессию ssh на третьей машине с plink (это клиент командной строки ssh). Мне кажется странным, что это невозможно. Что делать, если я хотел бы отредактировать файл на удаленном сервере или использовать отладчик интерактивной командной строки? – gwodus

+0

Редактирование текстовых файлов на удаленных серверах - это явно unix-подобная деятельность для администраторов. В мире Windows API являются королями и обычно удалены (wmi, dcom, winrm/soap). Любой отладчик, заслуживающий соли, может подключиться к удаленному серверу.Отладчики командной строки в этом случае редки: я знаю только два, один из которых никогда не используется удаленно (за пределами последовательного соединения.) - CDB и MDBG. – x0n

+0

Итак, чтобы добавить к этой стене текст, если вы хотите удаленную интерактивность, тогда установите SSH-сервер. – x0n

0

Вы можете обойти проблему с помощью Invoke-Command командлет, который выполняет и выходит

Invoke-Command -ComputerName Mobius -ScriptBlock {## your stuff}

и объединить его с трубой, так и в случае команды даты

Invoke-Command -ComputerName Mobius -ScriptBlock {echo "01-02-1999" |cmd /c date}

или для плинтуса

Invoke-Command -ComputerName Mobius -ScriptBlock {"yourpassword"| &'c:\Program Files (x86)\Putty\plink.exe' merlin -l joe `"bashcommand1 && bashcommand2`" } 

или даже проще

Invoke-Command -ComputerName Mobius -ScriptBlock { &'c:\Program Files (x86)\Putty\plink.exe' merlin -l joe -pw yourpass `"bashcommand1 && bashcommand2`" } 

но @ X0n не сказал никакой реальной интерактивности.

+0

Как я уже сказал в комментарии к решению X0n. Пароль не был моей проблемой. Я все еще нуждался в реальной интерактивности. Но спасибо за подсказку. Мне может понадобиться несколько трубопроводов, как вы делали для небольших небольших задач с заданными сценариями. – gwodus

Смежные вопросы