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

4

Я хочу оценить содержимое 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   ответ
4

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

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

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

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

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

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

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

Похожие вопросы