是否可以将PowerShell命令行拆分为多行?
在Visual Basic中,我可以使用下划线(_
)继续下一行中的命令.
我想通过标准输入将任意脚本传递给 Powershell。(在实践中,我想避免将脚本放入临时文件中,但出于这个问题的目的,我会将文件的内容通过管道传输到 powershell。)
所以我正在做这样的事情(在这个例子中,从 Windows cmd shell):
type myfile.txt | powershell -
Run Code Online (Sandbox Code Playgroud)
如果 myfile.txt 包含这样的内容,它会起作用:
1..3 | % { $_ *2 }
echo done
Run Code Online (Sandbox Code Playgroud)
(它输出2\n4\n6\ndone
.)但是,如果我像这样将第一个语句拆分成多行,那么 Powershell 只是存在而根本不生成任何输出:
1..3 |
% { $_ *2 }
echo done
Run Code Online (Sandbox Code Playgroud)
对于任何多行语句,这似乎都失败了。例如,这也无法产生输出:
1..3 | % {
$_ *2 }
echo done
Run Code Online (Sandbox Code Playgroud)
我对此感到惊讶,因为每个都是合法的 Powershell 脚本,如果放入 .ps1 文件并正常运行,它们将正常工作。
我尝试了各种方法,包括使用行继续符转义 EOL,但无济于事。如果父 shell 是 Powershell,甚至是 Python(使用 subprocess.Popen 和 stdin=PIPE),也会出现同样的效果。在每种情况下,Powershell 都没有任何错误地退出,退出代码为 0。
有趣的是,如果我运行以下命令,只会创建“before.txt”。
"before" | out-file before.txt
1..3 |
% { $_ *2 }
"after" | out-file after.txt …
Run Code Online (Sandbox Code Playgroud)