首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将ARM模板输出作为管道变量传递给Azure powershell任务时发出

将ARM模板输出作为管道变量传递给Azure powershell任务时发出
EN

Stack Overflow用户
提问于 2020-09-03 14:16:31
回答 1查看 660关注 0票数 0

我试图捕获ARM模板输出,并将其传递到下一个运行的脚本中。为此,我正在执行以下步骤,所有这些都是用Azure DevOps完成的。

  1. 在ARM模板中声明输出。

代码语言:javascript
运行
复制
 "outputs": {
    "adminUsername": {
        "type": "string",
        "value": "[parameters('adminUsername')]"
    },
     "virtualMachineName": {
         "value": "[parameters('virtualMachineName')]",
         "type": "string"
        }
}

  1. 将ARM模板输出传递到第一个Azure脚本中,将每个输出值声明为管道变量。因此,这可以用于我的下一个任务.

代码语言:javascript
运行
复制
    function Convert-ArmOutputToPsObject {
      param (
        [Parameter(Mandatory=$true)]
        [string]
        $ArmOutputString
      )
      if ($PSBoundParameters['Verbose']) {
        Write-Host "Arm output json is:"
        Write-Host $ArmOutputString
      }
      $armOutputObj = $ArmOutputString | ConvertFrom-Json
      $armOutputObj.PSObject.Properties | ForEach-Object {
          $type = ($_.value.type).ToLower()
          $keyname = "ArmOutputs.$($_.name)"
          $value = $_.value.value

          if ($type -eq "securestring") {
              Write-Host "##vso[task.setvariable variable=$keyname;issecret=true]$value"
              Write-Host "Added Azure DevOps secret variable '$keyname' ('$type')"
          } elseif ($type -eq "string") {
              Write-Host "##vso[task.setvariable variable=$keyname]$value"
              Write-Host "Set environment variable to ($env:$keyname)"
              Get-ChildItem Env:
              Write-Host "ARMoutput Id ($keyname)
          } else {
              Throw "Type '$type' is not supported for '$keyname'"
          }
      }
    }
    Convert-ArmOutputToPsObject -ArmOutputString '$(ArmOutputs)' -Verbose

上面脚本的输出是成功的:从这里我可以看到管道变量被设置和可用。

代码语言:javascript
运行
复制
Arm output json is:
{"adminUsername":{"type":"String","value":"azureuser"},"virtualMachineName":{"type":"String","value":"vm-test"}}
**##[debug]Processed: ##vso[task.setvariable variable=adminUsername;isOutput=true]azureuser**
Added Azure DevOps variable 'adminUsername' ('string') with value 'azureuser'
##[debug]Processed: ##vso[task.setvariable variable=virtualMachineName;isOutput=true]vm-test
Added Azure DevOps variable 'virtualMachineName' ('string') with value 'vm-test'

  1. 我试图在我的第二个Azure powershell脚本中使用上面创建的管道变量"virtualMachineName“作为参数。

代码语言:javascript
运行
复制
function Disk-encryption {
                                param (
                                [Parameter(Mandatory=$true)]
                                [string]
                                $virtualMachineName)
write-host $virtualMachineName
}
Disk-encryption -virtualMachineName '$(virtualMachineName)'

此脚本的执行将抛出以下错误

错误:

代码语言:javascript
运行
复制
Line |
   2 | Disk-encryption -virtualMachineName $(virtualMachineName)
     |                                   ~~~~~~~~~~~~~~~~~~
     | The term 'virtualMachineName' is not recognized as the name of
     | a cmdlet, function, script file, or operable program. Check
     | the spelling of the name, or if a path was included, verify
     | that the path is correct and try again.

甚至只是尝试只打印‘写-主机$virtualMachineName’,但得到了同样的错误。$virutalMachineName似乎不能作为管道变量使用。

有人能帮忙吗?我的问题是:1.从成功执行的任务中,在管道中有哪些管道变量被设置和全局可用?如果是,如何在我的第二个Azure Powershell脚本中使用新创建的管道变量?

EN

回答 1

Stack Overflow用户

发布于 2020-09-03 18:03:42

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63725524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档