【问题标题】:Stubborn Ampersand with Invoke-Webrequest SQL & Powershell带有 Invoke-Webrequest SQL 和 Powershell 的顽固 & 符号
【发布时间】:2020-12-16 20:15:07
【问题描述】:

当我在没有 & 符号的 URL 上使用 invoke-webrequest 运行 powershell 时,一切正常。

但是我的 URL 中有 & 符号。如果我用双引号将它们括起来,它可以在 PowerShell 中工作,但如果我是通过我的 SQL Server 来做的话。

试图获得正确的转义字符组合被证明是一件很痛苦的事情。下面是一个命令示例:

exec xp_cmdshell 'powershell Invoke-WebRequest -UseBasicParsing -Uri "https://example.com/getfile/12345&i=123" -outfile C:\Downloads\test.txt'

&i=123 上的 & 号才是问题所在。

如果我将 -URI 参数中的 & 号更改为 "&",它将不起作用。如果我以肉汁克拉(标签上方的小`)作为前缀,它就不起作用。我也试过用%26替换它。

在这里绞尽脑汁好几个小时。有什么建议吗?

【问题讨论】:

    标签: sql-server powershell escaping invoke-webrequest


    【解决方案1】:

    添加嵌入 "..."-quoting 到 URL,这需要转义为 \"...\"

    exec xp_cmdshell 'powershell Invoke-WebRequest -UseBasicParsing -Uri "\"https://example.com/getfile/12345&i=123\"" -outfile C:\Downloads\test.txt'
    

    这是必要的,因为 PowerShell 的 CLI(powershell.exe 用于 Windows PowerShell,pwsh 用于 PowerShell [Core] v6+),当与(隐含的)-Command (-c) 选项一起使用时[1 ]:

    • 首先删除 "..." 对各个命令行参数的引用...
    • 然后将剥离的参数与空格连接起来,then 将生成的字符串解释为 PowerShell 命令行 - 此时需要在 URL 周围引用,因为 & 是 PowerShell 元字符。

    注意:

    • 使用\" 转义嵌入的" 字符。在 "..." 字符串中 -Command (-c) 中的 CLI 参数工作稳健除了从 cmd.exe 调用时,其中存在 cmd.exe 元字符,例如 &(常见在 URL 中,例如在这种情况下)可以中断调用。

    • 在这种情况下,请使用 "^"" (原文如此) 表示 powershell.exe"" 表示 pwsh.exe - 有关详细信息,请参阅 this answer


    [1] 请注意,pwsh 现在默认为 -File,它需要一个脚本文件

    【讨论】:

    • 如果您要删除 exec xp_cmdshell 并从另一个 shell 或 taskchd 执行命令,会怎样? pwsh -c {Invoke-WebRequest -UseBasicParsing -Uri "\"https://example.com/getfile/12345&i=123\"" -outfile C:\downloads\test.txt}
    • @Shavelieva, { ... }(脚本块)只能在 inside PowerShell 中工作(你不需要转义)。从外部看,一种方法是在整个-c 参数周围使用"...",并使用"" 转义任何嵌入的参数:pwsh -c "Invoke-WebRequest -UseBasicParsing -Uri ""https://example.com/getfile/12345&i=123"" -outfile C:\downloads\test.txt"。在使用\" 进行转义工作时,它可能会中断当从cmd.exe 调用时 - 请参阅this answer
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2021-07-22
    • 2012-07-26
    • 2021-10-19
    相关资源
    最近更新 更多