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

Azure CLI创建SQL Server时含括号的管理员密码导致执行异常问题求助

Azure CLI创建SQL Server时含括号的管理员密码导致执行异常问题求助

问题重现

你遇到的这个问题其实是Windows环境下PowerShell传递特殊字符给Azure CLI时的常见坑——因为Azure CLI在Windows底层是通过CMD调用Python脚本的,括号这类特殊字符会被CMD误解析成命令语法,导致执行异常。

先再明确下你的场景:
原本的PowerShell脚本运行完全正常:

$Group = @("--resource-group", "groupy")
$Name =  @("--name", "servy")
$User =  @("--admin-user", "BigCahoona")
$Pass =  @("--admin-password", "Abcde12345#¤%")

az sql server create $Group $Name $User $Pass

但修改密码为含括号的内容后,出现两种异常情况:

  • 当密码改为Abcde12345()时,资源虽创建成功,但会抛出错误:

    C:\source\dev>echo Failed to load python executable.

    Failed to load python executable.

    C:\source\dev>exit /b 1

  • 当密码改为Abcde12345()()时,直接触发CMD语法错误,资源完全创建失败:

    () was unexpected at this time.

    C:\source\dev> "C:\Program Files\Microsoft SDKs\Azure\CLI2\wbin..\python.exe" -IBm azure.cli

    sql server create --resource-group groupy --name servy --admin-user BigCahoona --admin-password Abcde12345()()

解决方案

这里给你几个可行的解决办法,不用更换密码字符就能搞定:

1. 用单引号包裹密码字面量

在PowerShell里,单引号包裹的内容会被当作纯字符串,不会解析任何特殊字符(包括括号)。修改你的密码变量定义即可:

$Pass =  @("--admin-password", 'Abcde12345()()')

之后正常执行az命令就行,PowerShell会把带括号的密码原封不动传递给Azure CLI,不会被CMD误解析。

2. 使用--%关闭PowerShell参数解析

在az命令前加上--%,这个符号会让PowerShell停止解析后续参数,直接把它们传递给底层CMD执行,完全避免特殊字符被错误解析:

# 注意:使用--%后,PowerShell的变量替换会失效,需要先拼接好完整参数
$fullCommand = "sql server create --resource-group groupy --name servy --admin-user BigCahoona --admin-password Abcde12345()()"
az --% $fullCommand

如果你的参数是动态生成的,可以先把所有内容拼接成一个字符串,再用这种方式传递。

3. 用Invoke-Expression强制解析完整命令

把整个Azure CLI命令拼接成一个字符串,然后用Invoke-Expression执行,这样PowerShell会先处理变量,再把完整命令传递给CLI:

$Group = "--resource-group groupy"
$Name =  "--name servy"
$User =  "--admin-user BigCahoona"
$Pass =  "--admin-password Abcde12345()()"

$command = "az sql server create $Group $Name $User $Pass"
Invoke-Expression $command

不过要注意,Invoke-Expression处理不可信输入时有注入风险,但自己编写的脚本完全没问题。

为什么之前的转义没用?

你尝试的反斜杠、额外引号等是CMD里的转义方式,但在PowerShell里,这些规则不适用——PowerShell自身的解析逻辑会先处理一遍,导致转义字符被“吃掉”,到CMD层面还是没正确处理括号。用单引号或者--%才能跳过PowerShell的解析,让特殊字符原封不动到达Azure CLI。

备注:内容来源于stack exchange,提问作者Konrad Viltersten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:29:30