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

PowerShell如何转义&符号 解决Azure自动化SAS密钥传递截断问题

解决方案

你遇到的问题本质是两层特殊字符解析导致的:第一层是PowerShell语法解析时对双引号和&的转义规则不匹配,第二层是PowerShell调用外部命令azcopy时,&作为保留字符被提前解析截断。

步骤1:修正&转义的语法错误

你之前的替换写法不符合PowerShell的转义规则,正确的转义写法有两种可选:

  • 用单引号包裹替换值(单引号内的内容不会被PowerShell解析):
$sasKey = $sasKey.Replace('&', '"&"')
  • 用反引号`(PowerShell的官方转义符)转义双引号:
$sasKey = $sasKey.Replace("&", "`"&`"")

以上两种写法都不会再报Unexpected token '&'的语法错误。

步骤2:修复MyFunc内azcopy的调用逻辑

azcopy是外部可执行程序,PowerShell调用外部程序时会额外解析一次参数中的特殊字符,所以需要加停止解析符避免&被截断,修改azcopy copy行即可:

# 方案A:加--%停止解析符,PowerShell不会再解析后续参数的特殊字符
azcopy copy $sourcePath $destPath --recursive --%

# 方案B:显式给目标路径包裹两层双引号,适配外部命令的参数解析规则
azcopy copy $sourcePath "`"$destPath`"" --recursive

更简便的免转义方案

你也可以不对SAS密钥提前做&替换,仅在调用azcopy时加停止解析符即可,避免转义逻辑出错:

  1. 删掉sasKey的&替换代码,直接保留New-AzStorageAccountSASToken生成的原始值
  2. 仅修改MyFunc内的azcopy调用行,加--%停止解析符即可

可以通过你写入的c:\upload\log.txt先确认传入VM的sasKey是否完整,再验证azcopy的执行结果。


内容的提问来源于stack exchange,提问作者Blue Clouds

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:36:02