如何在Windows命令提示符中将命令输出设置为环境变量?

4

我已经将Azure存储密钥保存在密钥保管库中,我想使用Azure CLI检索密钥,并在运行terraform脚本之前在Windows cmd中将其设置为环境变量。

下面列出的命令无法正常工作,有人能告诉我需要更改什么吗?


az keyvault secret show --name mySecretName --vault-name myVaultName --query value | setx /M AZURE_STORAGE_CONNECTION_STRING
set ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name myKeyVault)

初始化错误

enter image description here

Main.tf

variable "count" {}
variable "prefix" {
default="RG"
 }
terraform {
backend "azurerm" {
container_name       = "new"
storage_account_name  = "mfarg"
key                  = "terraform.tfstate"
}}
resource "azurerm_resource_group" "test" {
count ="${var.count}"
name     = "${var.prefix}-${count.index}"
location = "West US 2"
}

命令提示符输出

输入图像描述


如果你在这里得不到足够的答案,你也可以在[ServerFault](https://serverfault.com/)或[SuperUser](https://superuser.com/)上提出类似的问题。 - cssyphus
你正在将一个多行的JSON文档赋值给一个变量,这可能会失败。使用"--query path --output tsv"来仅获取你所需要的属性。 - victor m
2个回答

4

如果您想在Windows中设置环境变量,我建议您使用PowerShell命令来实现。在PowerShell中,您只需要这样做:

$env:ACCESS_KEY=$(az keyvault secret show -n terraform-backend-key --vault-name myKeyVault --query value -o tsv)

此外,在您的CLI命令中,您不能直接显示秘密,它会输出整个秘密而不是您想要的访问密钥。请查看两个命令之间的区别。

enter image description here


@user2549572 将状态存储在Azure存储中,您应该导出环境变量ARM_ACCESS_KEY,而不是ACCESS_KEY。我刚刚向您展示了如何通过PowerShell设置环境变量。 - Charles Xu
抱歉,我的错。更改名称后它可以工作了。您能告诉我如何使用命令提示符设置环境变量吗? - user2549572
@user2549572 您可以使用您提供的命令 set var=''。但是似乎您可以直接使用CLI命令的输出设置变量。 - Charles Xu
1
@user2549572 就像我之前所说的,似乎你无法直接将命令的输出设置为变量。我也找不到方法。 - Charles Xu
Windows cmd != powershell - undefined
显示剩余2条评论

3

虽然回答晚了,但对于那些仍然遇到同样问题的人可能有用。 这个方法适用于Windows命令提示符(cmd)。

最初的回答:

For /f %%i in ('az keyvault secret show --vault-name "Your-KeyVault-Name" --name "Your-Secret-Name" --query "value"') do set "password=%%i"

现在如果你只运行"echo %password%",你将会看到你的密码值。 请记住,az命令必须放在' '之间,比如'az keyvault secret etc'。最初的回答。

在正确的cmd终端中,它能够完美运行!在常规命令提示符中,%%i会变成%i。在批处理脚本(.bat或.cmd)中,它是%%i。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接