Я хочу передать произвольные скрипты Powershell через stdin. (На практике я бы хотел не помещать скрипт во временный файл, но для целей этого вопроса я буду передавать содержимое файла в файл powershell.)Powershell не может запускать многострочные команды из stdin?
Так что я делаю что-то как так (в данном примере, из ЦМД оболочки Windows):
type myfile.txt | powershell -
это работает, если myfile.txt содержит что-то вроде этого: (. Она выводит 2\n4\n6\ndone
)
1..3 | % { $_ *2 }
echo done
Однако, если я разделим это первое утверждение acr ОСС несколько линий, как это так, то Powershell просто существует, не выводя на всех:
1..3 |
% { $_ *2 }
echo done
Это, кажется, не в состоянии для любого многострочного заявления. Например, это также не в состоянии произвести вывод:
1..3 | % {
$_ *2 }
echo done
Я удивлен этим, так как каждый являются юридическими сценариями Powershell, которые будут работать нормально, если поместить в файл .ps1 и работать в нормальном режиме.
Я пробовал различные вещи, в том числе избегая EOL, используя строки продолжения строки, но безрезультатно. Тот же эффект возникает, если родительская оболочка - Powershell или даже Python (с использованием subprocess.Popen с stdin = PIPE). В каждом случае Powershell выходит без какой-либо ошибки, а код выхода равен 0.
Интересно, если я запустил следующее, создается только «before.txt».
"before" | out-file before.txt
1..3 |
% { $_ *2 }
"after" | out-file after.txt
echo done
Любые идеи, почему у Powershell возникнут проблемы с чтением многострочной команды, если она будет прочитана из stdin?
Спасибо. Я только что попробовал это, и у меня получился такой же (неудачный) результат. –
Я получаю тот же неудачный результат, если я нажимаю строку, как вы предлагаете. –
@MichaelLewis: Я бы не удивился, если PowerShell разделит строки на строки, передавая их другим программам. И 'powershell' в этом случае - это программа, а не командлет. – Joey