【问题标题】:How to pass quoted arguments to elevated batch script via powershell Start-Process如何通过powershell Start-Process将引用的参数传递给提升的批处理脚本
【发布时间】:2017-07-28 21:53:27
【问题描述】:

在提升时我很难将引号传递给 .bat 文件,二进制文件似乎可以正常工作...重现步骤:

创建一个小测试批处理脚本%TEMP%\test.bat 包含

echo.%* && pause

启动 powershell 并尝试这些:

# both behave like expected, echoing hello and pausing
saps -filepath cmd -argumentlist '/c echo.hello && pause'
saps -filepath "$env:TEMP\test.bat" -argumentlist 'hello'

# both behave like expected, echoing "hello" and pausing
saps -filepath cmd -argumentlist '/c echo."hello" && pause'
saps -filepath "$env:TEMP\test.bat" -argumentlist '"hello"'

# both behave like expected, echoing an elevated hello and pausing
saps -verb runas -filepath cmd -argumentlist '/c echo.hello && pause'
saps -verb runas -filepath "$env:TEMP\test.bat" -argumentlist 'hello'

# cmd still echoes correctly "hell"no and pauses
saps -verb runas -filepath cmd -argumentlist '/c echo."hell"no && pause'

# tl;dr

# now this is where hell breaks loose
saps -verb runas -filepath "$env:TEMP\test.bat" -argumentlist '"hell"no'
# doesnt echo anything, window pops up and vanishes in an instant
# doesnt pause

【问题讨论】:

    标签: windows powershell parameter-passing double-quotes


    【解决方案1】:

    如果您直接在批处理文件上调用“runas”动词,它就不起作用。您需要在实际的可执行文件(即cmd.exe)上调用它并将批处理文件作为参数传递。

    $params = '/c', "$env:TEMP\test.bat", '"hell"no'
    Start-Process -Verb Runas -FilePath $env:ComSpec -ArgumentList $params
    

    【讨论】:

      猜你喜欢
      • 2019-07-06
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2023-01-23
      • 2021-02-25
      • 2015-11-21
      • 1970-01-01
      • 2012-12-10
      相关资源
      最近更新 更多