【问题标题】:How to set command output as env. variable in windows cmd?如何将命令输出设置为 env。 windows cmd中的变量?
【发布时间】:2019-08-09 01:09:54
【问题描述】:

我已将 azure 存储密钥保存在密钥保管库中,我想使用 Azure cli 检索密钥并将其设置为 env。在我运行 terraform 脚本之前,window cmd 中的变量。

下面列出的命令不起作用,谁能告诉我需要更改什么?

set ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name myKeyVault)

初始化错误

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"
}

命令提示符输出

【问题讨论】:

  • 如果您在这里没有得到足够的答案,您可能还想在ServerFaultSuperUser 上提出类似的问题。
  • 您将多行 JSON 文档分配给可能失败的变量。使用“--query path --output tsv”来获取你需要的属性。

标签: windows terraform azure-cli


【解决方案1】:

在Windows中设置环境变量,我建议你使用PowerShell命令来实现。在 PowerShell 中,您可以这样做:

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

此外,在您的 CLI 命令中,您无法直接显示秘密,它会输出整个秘密,而不仅仅是您想要的访问密钥。看看这两个命令的区别。

【讨论】:

  • 我尝试设置环境。您建议的变量,但是在设置它之后,在 terraform init(使用 terraform 远程状态 azure 存储)将状态文件存储在 azure 上时出现错误,该错误与 azureRM 模块有关吗?因为我正在开发新的 AZ 模块
  • @user2549572 将状态存储在 Azure 存储中,您应该导出环境变量ARM_ACCESS_KEY,而不是ACCESS_KEY。我只是告诉你如何通过PowerShell设置环境变量。
  • 对不起,我的错。它在更改名称后起作用。你能告诉我如何设置环境吗?变量使用命令提示符?
  • @user2549572 您可以使用您提供的命令set var=''。但似乎您可以直接使用 CLI 命令的输出设置变量。
  • 我试过这样做,但它将整个命令作为一个值而不是它的输出,附上截图
【解决方案2】:

一个迟到的答案,但可能对那些仍然有同样问题的人有用。 此方法适用于 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'。

【讨论】:

    猜你喜欢
    • 2014-05-26
    • 2017-04-20
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多