繁体   English   中英

立即启动 powershell 和命令

[英]launch powershell and commands at once

如果我在 powershell 中执行此操作:

echo beep ; echo beep

它打印:

beep
beep

但如果我在常规控制台中执行此操作:

powershell -command { echo beep ; echo beep }

它打印:

echo beep ; echo beep

获得相同结果的正确语法是什么?

脚本块( { ... } ) 内的命令列表传递给powershell -Commandpowershell -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 中echoWrite-Output的别名,它写入成功输出流; 来自未捕获或重定向隐含任何命令或表达式的输出变为输出流,以便使用echo / Write-Output通常是不必要的:

powershell -command "& { $Args[0]; $Args[0] } beep"

[1] 从 PowerShell内部,将脚本块传递给powershell -command会导致调用PowerShell 会话识别它并将包含的命令视为要传递给新会话执行的命令。
在 PowerShell外部{...}是传递给新会话的字符串,然后新会话将该字符串解析为 PowerShell 代码。 单独评估脚本块,无需通过& (或. )显式调用,只需输出脚本块的文字内容,这解释了您的输出; 您可以通过提交来验证此行为
{ echo beep; echo beep }
{ echo beep; echo beep }在 PowerShell 提示符下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM