使用 Azure CLI 从变量创建 Azure Key Vault 机密删除插入符号 ^ 值中的字符

Create Azure Key Vault secret from variable with Azure CLI drops caret ^ character in value

我正在尝试使用 Azure Cli v2.9.0 创建一个新的 Azure Key Vault 机密(我们在我们的管道中使用这个版本,目前升级会很困难。)通过下面的命令,

$myValue = "abc^def" 
az keyvault secret set --vault-name $myKeyVaultName -n $mySecretName --value @myValue 

@myValue 的值实际上作为参数传递给脚本。

该命令被接受并创建了一个新的秘密,但它从字符串中删除了插入符号 (^) 并导致秘密值 abcdef 而不是预期的 abc^def。

我之前提出了问题 并且 Joy Wang 正确地指出将字符串文字形成为 '"abc^def"' 将允许通过 Powershell 正确添加值。作为该问题的扩展,我想知道如何将相同的值从变量传递到 az keyvault secret set cmdlet。

按如下方式执行此操作仍会删除插入符号 (^)

$myValue = "abc^def" 
az keyvault secret set --vault-name $myKeyVaultName -n $mySecretName --value @myValue 


$myValue = "abc^def" 
az keyvault secret set --vault-name $myKeyVaultName -n $mySecretName --value $(@myValue)

发布脚本片段以进行说明

param (   
    [Parameter(Mandatory=$True)]
    [ValidateNotNullorEmpty()]
    [string]$KeyVaultResourceGroup, 
    [Parameter(Mandatory=$True)]
    [ValidateNotNullorEmpty()]
    [string]$KeyVaultInstanceName,
    [Parameter(Mandatory=$True)]
    [ValidateNotNullorEmpty()]
    [string]$CCnB_FileServer_Password_Value
)

#####################################
###########Initialsiing##############
#####################################
$ErrorActionPreference = "Stop"
$WarningPreference = 'SilentlyContinue'
Set-Location $PSScriptRoot
[Console]::ResetColor()

#############################################################
########### Create new Gasmap Key Vault secrets #############
#############################################################
#Create Secrets
if ($secrets.name -NotContains "CCnBFileServerPassword"){
    Write-Output "INFO: Creating CCnBFileServerPassword secret in key vault $KeyVaultInstanceName"  
    az keyvault secret set --vault-name $KeyVaultInstanceName -n "CCnBFileServerPassword" --value $CCnB_FileServer_Password_Value | Out-Null 
} else {
    Write-Output "INFO: CCnBFileServerPassword secret already exists in key vault $KeyVaultInstanceName"  
}

return 0

知道如何正确传递这个值吗?

您可以使用 CLI 保存如下值:

随心所欲保存:

不知道@表达式是什么意思,在powershell中,我们总是使用$来定义变量。

经过一些测试后,您可以在 PowerShell 环境中使用 CLI,如下所示。

$myvalue = 'abc"^"def'
az keyvault secret set --vault-name joykeyvault -n testkey12 --value $myvalue