Warm tip: This article is reproduced from serverfault.com, please click

powershell-使用Azure CLI从变量创建Azure Key Vault机密将插入符号^字符的值

(powershell - Create Azure Key Vault secret from variable with Azure CLI drops caret ^ character in value)

发布于 2020-12-09 08:12:20

我想通过以下命令使用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

知道如何正确传递此值吗?

Questioner
Phil Murray
Viewed
0
Joy Wang 2020-12-10 14:07:06

不确定@表达式的含义是什么,在powershell中,我们总是使用它$来定义变量。

完成一些测试后,你可以在PowerShell环境中使用CLI,如下所示。

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

在此处输入图片说明