:: From cmd.exe.
:: No embedded "..." enclosure for the -Command arguments -> no need to ^-escape &
runas.exe /savecred /user:user "powershell -NoExit -Command & { echo 123 }"
此外,请注意,您不需要& { ... }围绕您传递给-Command的命令-只需直接使用命令 *:
:: From cmd.exe.
:: No need for & { ... }
runas.exe /savecred /user:user "powershell -NoExit -Command echo 123"
1条答案
按热度按时间ezykj2lf1#
cmd /k
调用-将-NoExit
传递给powershell.exe
直接保持会话打开。"..."
字符串中的 embedded"
必须 * 转义 * 为\"
cmd.exe
本身-与runas.exe
不同-不将\"
识别为转义的"
,因此将其视为外部开始"
的 closing"
,因此将&
视为 outside"..."
,这将导致解释为cmd.exe
的语句排序运算符。将&
转义为^&
可以避免这种情况。请注意,其他
cmd.exe
元字符,如|
,也必须进行^
转义。您可以*避免或减少 * 对
^
-escaping的需要,方法是利用powershell.exe
(Windows PowerShell CLI)还允许您将命令字符串的组件作为 * 单独的参数 * 传递,即不带整体"..."
机箱:此外,请注意,您不需要
& { ... }
围绕您传递给-Command
的命令-只需直接使用命令 *:尽管如此,您仍然可以运行与
cmd.exe
的解析相冲突,即当PowerShell命令 * 本身 * 需要"
字符时(而不是仅在初始 * 命令行 * 中使用"
* 语法 *):下面的代码使PowerShell打印 * 逐字 *
3" of snow & more
:请注意,需要 * 双重 * 转义
"
字符(\\\"
,首先转义runas.exe
,然后转义powershell.exe
),并再次需要^
-转义&
以利于cmd.exe
。