Как оценить скрипт powershell, введенный из stdin

Я хочу оценить содержимое StdIn в Powershell, например:

echo "echo 12;" | powershell -noprofile -noninteractive -command "$input | iex"

Выход:echo 12;

К несчастью,$input это не строка, аSystem.Management.Automation.Internal.ObjectReader, которые делаютiex не работает, как ожидалось ... так как этот работает правильно:

powershell -noprofile -noninteractive -command "$command = \"echo 12;\"; $command | iex"

Выход:12

Ответы на вопрос(1)

Решение Вопроса

Используйте скрипт-блок:

echo "echo 12;" | powershell -noprofile -noninteractive -command { $input | iex }

Или используйте одинарные кавычки, чтобы избежать интерполяции строк:

 echo "echo 12;" | powershell -noprofile -noninteractive -command '$input | iex'

поэтому переменная $ input isn 'т, и строка "$ Введите» передается в iex.

Оба из них дают мне12" .

 sandvige05 мар. 2013 г., 14:15
Прохождение через StdIn было способом пойти, спасибо :)
 sandvige14 дек. 2012 г., 14:13
Это работает, когда тызапускается это из другой PowerShell, но этоне работает при использовании его из cmd.exe. Зачем?
 Marcus14 дек. 2012 г., 15:18
Тот'с кавычками вокругэхо 12; ", Если вы выполните это в powershell echo "эхо 12; " дает эхо 12; без кавычек. В cmd.exe выпосмотрим что пишетэхо 12; ", который затем интерпретируется Powershell как строка. Чтобы заставить его работать в cmd.exe, вы можете попробовать:echo echo 12; | powershell -noprofile -noninteractive -command "$input | iex"

Ваш ответ на вопрос