我试图捕获ARM模板输出,并将其传递到下一个运行的脚本中。为此,我正在执行以下步骤,所有这些都是用Azure DevOps完成的。
"outputs": {
"adminUsername": {
"type": "string",
"value": "[parameters('adminUsername')]"
},
"virtualMachineName": {
"value": "[parameters('virtualMachineName')]",
"type": "string"
}
} 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上面脚本的输出是成功的:从这里我可以看到管道变量被设置和可用。
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'function Disk-encryption {
param (
[Parameter(Mandatory=$true)]
[string]
$virtualMachineName)
write-host $virtualMachineName
}
Disk-encryption -virtualMachineName '$(virtualMachineName)'此脚本的执行将抛出以下错误
错误:
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脚本中使用新创建的管道变量?
发布于 2020-09-03 18:03:42
https://stackoverflow.com/questions/63725524
复制相似问题