Powershell 无法在发布管道中打印Azure Keyvault机密

Powershell 无法在发布管道中打印Azure Keyvault机密,powershell,azure-devops,azure-pipelines,azure-pipelines-release-pipeline,azure-devops-rest-api,Powershell,Azure Devops,Azure Pipelines,Azure Pipelines Release Pipeline,Azure Devops Rest Api,我正在尝试使用以下代码从发布管道中检索Azure Key vault机密。但是我无法使用下面的代码打印出准确的字符串 (Get-AzKeyVaultSecret -vaultName "keyvalultname" -name "Password").SecretValueText $Password= (Get-AzKeyVaultSecret -vaultName "keyvalultname" -name "Password").SecretValueText $Password Writ

我正在尝试使用以下代码从发布管道中检索Azure Key vault机密。但是我无法使用下面的代码打印出准确的字符串

(Get-AzKeyVaultSecret -vaultName "keyvalultname" -name "Password").SecretValueText
$Password= (Get-AzKeyVaultSecret -vaultName "keyvalultname" -name "Password").SecretValueText
$Password
Write-Output 'DBPassword is $Password'
Write-Host 'DBPassword is $Password'

if ($Password-eq "Password01")
{
   Write-Host "1"
}
else
{
   Write-Host "0"
}

Write-Host $($Password.Username)
在上面的代码中,我没有得到值“Password01”。但我可以在IF条件下打印1

我得到的输出如下所示

2019-12-09T14:01:45.9967410Z ***
2019-12-09T14:01:45.9972871Z DBPassword is $Password
2019-12-09T14:01:45.9984181Z DBPassword is $Password
2019-12-09T14:01:45.9992966Z 1
2019-12-09T14:01:46.0026811Z 
2019-12-09T14:01:46.0030953Z 

这是Azure DevOps行为,要屏蔽机密变量而不打印日志中的值,请参阅:

我们努力掩盖在Azure管道中出现的秘密 输出,但它不是防弹的。永远不要将秘密作为输出。一些 操作系统记录命令行参数。永远不要把秘密传给别人 命令行。相反,我们建议您将您的秘密映射到 环境变量

我们永远不会掩盖秘密的子串。例如,如果“abc123” 设置为机密时,“abc”不会从日志中屏蔽。这是为了 避免在过于细粒度的级别屏蔽机密,使日志 不可读。因此,机密不应包含结构化的 数据。例如,如果将“{foo”:“bar”}”设置为机密,“bar” 不会从日志中屏蔽

如果将值打印为字符,则可以垂直打印值:

$Password.ToCharArray()

这是Azure DevOps行为,要屏蔽机密变量而不打印日志中的值,请参阅:

我们努力掩盖在Azure管道中出现的秘密 输出,但它不是防弹的。永远不要将秘密作为输出。一些 操作系统记录命令行参数。永远不要把秘密传给别人 命令行。相反,我们建议您将您的秘密映射到 环境变量

我们永远不会掩盖秘密的子串。例如,如果“abc123” 设置为机密时,“abc”不会从日志中屏蔽。这是为了 避免在过于细粒度的级别屏蔽机密,使日志 不可读。因此,机密不应包含结构化的 数据。例如,如果将“{foo”:“bar”}”设置为机密,“bar” 不会从日志中屏蔽

如果将值打印为字符,则可以垂直打印值:

$Password.ToCharArray()

你为什么要这么做?如果需要了解keyvault机密的值,请查看keyvault。如果您没有访问权限,请请求访问。如果你不能访问,也许你不能查看秘密值?在一个小切线上,
Write Output
Write Host
调用返回的
DBPassword是$Password
而不是
DBPassword是Password01
或者实际上
DBPassword是***
的原因是单引号字符串是逐字字符串,这意味着表达式不会被计算。使用双引号代替。看,你为什么要这么做?如果需要了解keyvault机密的值,请查看keyvault。如果您没有访问权限,请请求访问。如果你不能访问,也许你不能查看秘密值?在一个小切线上,
Write Output
Write Host
调用返回的
DBPassword是$Password
而不是
DBPassword是Password01
或者实际上
DBPassword是***
的原因是单引号字符串是逐字字符串,这意味着表达式不会被计算。使用双引号代替。请参阅。如果要水平打印机密,可以使用以下命令:$singleLineSecret=$secret.tocharray()-join''如果要水平打印机密,可以使用以下命令:$singleLineSecret=$secret.tocharray()-join''