PowerShell构造JSON字符串调用kubectl patch时报错求助
问题原因&解决办法
你的问题出在PowerShell的字符串转义规则和你用的转义方式不匹配:
在PowerShell里,用双引号包裹字符串时,你用\"来转义双引号,但PowerShell会把\当成字面量字符传给kubectl,导致最终JSON里出现多余的\,触发了kubectl的JSON解析错误。
给你三种靠谱的解决方式:
方式1:用Here-String构造JSON(最清晰不易错)
PowerShell的Here-String可以直接写带双引号的JSON,还能正常展开变量,完全不用手动转义:
# 先构造JSON字符串 $patchContent = @" {"imagePullSecrets": [{"name": "$nameToPatch"}]} "@ # 再执行kubectl命令 kubectl patch serviceaccount default -p $patchContent -n $namespaceToPatch
方式2:用PowerShell的转义符(反引号`)替换反斜杠
PowerShell里转义双引号要用反引号(键盘左上角~键对应的符号),而不是反斜杠,修改后的命令:
kubectl patch serviceaccount default -p "{`"imagePullSecrets`": [{`"name`": $nameToPatch}]}" -n $namespaceToPatch
方式3:单引号包裹JSON+子表达式展开变量
用单引号包裹整个JSON字符串,变量部分用$()强制展开(因为单引号字符串默认不解析变量):
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": '$($nameToPatch)'}]}' -n $namespaceToPatch
内容的提问来源于stack exchange,提问作者CodeMonkey
相关产品推荐
相关产品推荐

