通过runas.exe执行的PowerShell命令

5m1hhzi4  于 2023-05-17  发布在  Shell
关注(0)|答案(1)|浏览(275)

我需要通过 * runas.exe * 执行PS命令。PS命令可以单独工作,但我不能让它作为runas.exe调用工作。似乎是一个逃避问题,但引号+双引号在这里不起作用,出于某种原因:(
原始命令:

runas.exe /savecred /user:user "cmd.exe /k powershell -Command "& {echo 123}""

谢谢!

ezykj2lf

ezykj2lf1#

:: From cmd.exe
runas.exe /savecred /user:user "powershell -NoExit -Command \"^& { echo 123 }\""
  • 不需要通过cmd /k调用-将-NoExit传递给powershell.exe直接保持会话打开。
  • 整个"..."字符串中的 embedded"必须 * 转义 * 为\"
  • 不幸的是,因为cmd.exe本身-与runas.exe不同-不将\"识别为转义的",因此将其视为外部开始"closing",因此将&视为 outside"...",这将导致解释为cmd.exe的语句排序运算符。将&转义为^&可以避免这种情况。

请注意,其他cmd.exe元字符,如|,也必须进行^转义。
您可以*避免或减少 * 对^-escaping的需要,方法是利用powershell.exe(Windows PowerShell CLI)还允许您将命令字符串的组件作为 * 单独的参数 * 传递,即不带整体"..."机箱:

:: 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"

尽管如此,您仍然可以运行与cmd.exe的解析相冲突,即当PowerShell命令 * 本身 * 需要"字符时(而不是仅在初始 * 命令行 * 中使用" * 语法 *):
下面的代码使PowerShell打印 * 逐字 * 3" of snow & more

runas.exe /savecred /user:tu1 "powershell -NoExit -Command echo '3\\\" of snow ^& more'"

请注意,需要 * 双重 * 转义"字符(\\\",首先转义runas.exe,然后转义powershell.exe),并再次需要^-转义&以利于cmd.exe

相关问题