如果我在powershell中这样做:
echo beep ; echo beep
打印:
beep
beep
但如果我在常规控制台中执行此操作:
powershell -command { echo beep ; echo beep }
打印:
echo beep ; echo beep
获得相同结果的正确语法是什么?
答案 0 :(得分:0)
仅支持将脚本块({ ... }
)内的命令列表传递给powershell -Command
执行 来自PowerShell本身,因为正在运行powershell -h
会告诉您。
从PowerShell的外部,只需按原样传递命令,但最好是在双引号内,以防止cmd.exe
对参数进行无意的预先解释:
powershell -command "echo beep ; echo beep"
但请注意,cmd.exe
- 样式的环境变量引用(例如,%USER%
)仍在预先扩展。
或者,您可以传递脚本块(字符串) [1]
以&
开头,调用运算符以确保脚本块的执行,但只有在您想传递参数时才需要到脚本块:
powershell -command "& { echo $Args[0]; echo $Args[0] } beep"
beep
作为第一个参数传递,脚本块引用该参数为$Args[0]
。
暂且不说:在PowerShell中echo
是Write-Output
的别名,它写入成功输出流;未捕获或重定向的任何命令或表达式的输出隐式将转到输出流,因此通常不需要使用echo
/ Write-Output
:
powershell -command "& { $Args[0]; $Args[0] } beep"
[1]从内部 PowerShell,将脚本块传递给powershell -command
会导致调用 PowerShell会话识别它并处理随附的命令作为传递给新会话执行的命令
从PowerShell的外部,{...}
是传递给新会话的字符串,
然后是新会话然后将该字符串解析为PowerShell代码。在没有显式调用的情况下自行评估脚本块,只需输出脚本块的文字内容即可解释输出;您可以通过提交确认此行为
PowerShell提示符下的{ echo beep; echo beep }
。