You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在SSMS中通过xp_cmdshell执行PowerShell代码报错如何解决?

报错原因

  1. CMD特殊字符解析冲突:xp_cmdshell会先把命令交给系统CMD环境解析,URL中的&是CMD的默认命令分隔符,会被直接拆分为两个命令执行,因此&后的appid部分会被当成独立命令触发不存在的报错。
  2. 语法拼接疏漏:你拼接PowerShell命令时,URL的结束引号和-UseBasicParsing参数之间没有空格,多层转义后触发了PowerShell的引号匹配异常,导致缺少结束符的报错。

修复方案

调整两点即可:

  • 把URL中的&替换为CMD转义格式^&,避免CMD提前拆分命令
  • 给URL结束引号后加空格,和后续参数分开,同时用双引号把整个PowerShell执行块包裹避免转义混乱

修正后可正常运行的代码如下:

declare @url varchar(250) = 'https://samples.openweathermap.org/data/2.5/weather?q=London,uk^&appid=439d4b804bc8187953eb36d2a8c26a02'
declare @c varchar(1000) = N'powershell.exe -noprofile -executionpolicy bypass '
  + N'-command "(Invoke-WebRequest -Uri '''+@url+''' -UseBasicParsing).content"'
print @c
exec xp_cmdshell @c

如果后续遇到更复杂的命令转义问题,可以直接把PowerShell命令编码为UTF-16LE的Base64字符串,使用-EncodedCommand参数传入,完全规避多层环境的转义冲突。

内容的提问来源于stack exchange,提问作者Dave Pa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:15:09