Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 无法读取VSTS联机版本变量_Powershell_Azure_Environment Variables_Azure Devops_Azure Keyvault - Fatal编程技术网

Powershell 无法读取VSTS联机版本变量

Powershell 无法读取VSTS联机版本变量,powershell,azure,environment-variables,azure-devops,azure-keyvault,Powershell,Azure,Environment Variables,Azure Devops,Azure Keyvault,我正在使用VSTS环境变量,并且一直使用秘密类型的变量。 我正在使用POSH脚本(文件)生成一个变量(实际上,是从Azure Key Vault获取值并将该值设置为变量): #在发布步骤中添加为脚本参数 #脚本本身 Param( [string]$ResourceGroupNameArg, [string]$KeyVaultNameArg, [string]$KeyVaultSecretNameArg ) <...> $secret = Get-AzureKeyVa

我正在使用VSTS环境变量,并且一直使用秘密类型的变量。
我正在使用POSH脚本(文件)生成一个变量(实际上,是从Azure Key Vault获取值并将该值设置为变量):

#在发布步骤中添加为脚本参数

#脚本本身

Param(
   [string]$ResourceGroupNameArg,
   [string]$KeyVaultNameArg,
   [string]$KeyVaultSecretNameArg
)
<...>
$secret = Get-AzureKeyVaultSecret -VaultName $KeyVaultNameArg -Name $KeyVaultSecretNameArg 
$secretValue = $secret.SecretValueText
Write-Host "##vso[task.setvariable variable=SQLAdministratorPassword;issecret=true]$secretValue"
Param(
[字符串]$ResourceGroupNameArg,
[字符串]$KeyVaultNameArg,
[字符串]$KeyVaultSecretNameArg
)
$secret=获取AzureKeyVaultSecret-VaultName$KeyVaultNameArg-Name$KeyVaultSecretNameArg
$secretValue=$secret.SecretValueText
写入主机“##vso[task.setvariable variable=SQLAdministratorPassword;issecret=true]$secretValue”
在这里,我可以通过替换$KeyVaultNameArg和$KeyVaultSecretNameArg变量向脚本传递不同的KeyVault名称(根据需要)。

Param(
   [string]$ResourceGroupNameArg,
   [string]$KeyVaultNameArg,
   [string]$KeyVaultSecretNameArg
)
<...>
$secret = Get-AzureKeyVaultSecret -VaultName $KeyVaultNameArg -Name $KeyVaultSecretNameArg 
$secretValue = $secret.SecretValueText
Write-Host "##vso[task.setvariable variable=SQLAdministratorPassword;issecret=true]$secretValue"
对于使用
#vso[task.setvariable=
配置的任何其他变量,我可以使用构造
$env:DatabaseName
(例如在另一个POSH脚本中)或代理阶段步骤中的
$(DatabaseName)
检索它们(使用托管代理)

但是,对于
issecret=true
变量,甚至对于手动创建的变量,我无法在发布部署过程中检索其值

文章说,

隐藏(秘密)变量的值安全地存储在 保存后,用户无法查看服务器和。在 部署时,发布管理服务将在 由任务引用,并通过安全的 HTTPS频道


因此,尽管变量是机密的,但脚本(甚至代理阶段步骤)应该可以访问这些变量。

请参考以下步骤:

  • 单击“库”选项卡
  • 单击+变量组
  • 指定变量组名
  • 为Azure密钥库启用链接机密作为变量,并链接Azure密钥库
  • 单击+添加以添加必要的机密
  • 编辑发布定义
  • 选择变量选项卡
  • 选择变量组
  • 单击“链接变量组”链接该变量组
  • 直接在发布任务中使用相关变量(
    $(变量名称)

  • 不过,感谢您提供本指南,您能澄清一下PowerShell和链接变量的情况吗?尽管VSTS内部库是一种可接受的方法,但我希望对它有更多的控制权(这里使用POSH脚本访问Azure KeyVault、获取机密和设置变量)。根据日志,它会执行相同的过程,如果您以我的方式尝试,结果会是什么?我已经尝试使用库和变量组配置我的版本。事实上,这是有效的。但主要思想(和我的主要问题)是避免按KeyVault名称绑定(使用库方法进行绑定)。为了更好地理解,我更新了我的初始问题。请尝试打印$secretValue(写入主机$secretValue)并检查该值是否正确。顺便说一句,这两种方法对我都适用。请查看详细信息,遗憾的是,脚本设置变量不起作用。也许你有什么建议,为什么?