我有一个简单的ARM模板,可以输出一个元素数组。我正在尝试在Powershell中检索所说的元素数组,但是似乎没有任何帮助。似乎部署结果确实包含数组的值,但是一旦我尝试导航到该值,它们就会变成空字符串。
理想情况下,我想将ARM模板中的数组输出检索到powershell变量中。
ARM模板:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
},
"variables": {
"test": [
"value1",
"value2"
]
},
"resources": [
],
"outputs": {
"result": {
"type": "array",
"value": "[variables('test')]"
}
}
}
我尝试过的所有方法:
Powershell代码:
$name = ((Get-Date).ToUniversalTime()).ToString('MMdd-HHmmss')
$deploymentResult = New-AzureRmResourceGroupDeployment `
-Name $name `
-ResourceGroupName test4 `
-TemplateFile 'test2.json' `
-Force -Verbose `
-ErrorVariable ErrorMessages
if ($ErrorMessages) {
Write-Output '', 'Template deployment returned the following errors:', @(@($ErrorMessages) | ForEach-Object { $_.Exception.Message.TrimEnd("`r`n") })
}
Write-Output $deploymentResult
Write-Host ($deploymentResult.outputs | Format-Table | Out-String)
Write-Host "Outputs:" $deploymentResult.outputs
Write-Host "Outputs.value:" $deploymentResult.outputs.value
Write-Host "Outputs.values:" $deploymentResult.outputs.values
Write-Host "Outputs[0]:" $deploymentResult.outputs[0]
Write-Host "Outputs[1]:" $deploymentResult.outputs[1]
Write-Host "Outputs[0].value:" $deploymentResult.outputs[0].value
Write-Host "Outputs[1].value:" $deploymentResult.outputs[1].value
Write-Host "Outputs.result:" $deploymentResult.outputs.result
Write-Host "Outputs.result.value:" $deploymentResult.outputs.result.value
Write-Host "Outputs.result.values:" $deploymentResult.outputs.result.values
Write-Host "Outputs.result[0]:" $deploymentResult.outputs.result[0]
Write-Host "Outputs.result[1]:" $deploymentResult.outputs.result[1]
Write-Host "Outputs.result[0].value:" $deploymentResult.outputs.result[0].value
Write-Host "Outputs.result[1].value:" $deploymentResult.outputs.result[1].value
Write-Host "Outputs.result[0][0]:" $deploymentResult.outputs.result[0][0]
Write-Host "Outputs.result.value1:" $deploymentResult.outputs.result.value1
Write-Host "Outputs.result[0].value1:" $deploymentResult.outputs.result[0].value1
Write-Host
Write-Host "Outputs.values:" $deploymentResult.outputs.values
Write-Host "Outputs.result.Count:" $deploymentResult.outputs.result.Count
Write-Host "Outputs.result:" $deploymentResult.outputs.result
Write-Host "Outputs.result[0]:" $deploymentResult.outputs.result[0]
Write-Host "Outputs['result']:" $deploymentResult.outputs['result']
Write-Host
Write-Host "Deployment properties:"
($deploymentResult) | Select-Object -Property *
Write-Host "Outputs properties:"
($deploymentResult.outputs) | Select-Object -Property *
Write-Host "Result properties:"
($deploymentResult.outputs.result) | Select-Object -Property *
Write-Host "['Result'] properties:"
$deploymentResult.outputs['result'] | Select-Object -Property *
Write-Host "[array]['Result'] properties:"
[array]$deploymentResult.outputs['result'] | Select-Object -Property *
Write-Host "Outputs.values properties:"
($deploymentResult.outputs.values) | Select-Object -Property *
Write-Host
ForEach ($res in $deploymentResult.outputs['result']){
Write-Host "Result element:" $res
}
Write-Host
ForEach ($res in $deploymentResult.outputs.values){
Write-Host "Values element:" $res
}
Write-Host
Write-Host "JSON:"
Write-Host "Deployment ConvertTo-Json:"
$json = ($deploymentResult) | ConvertTo-Json
Write-Host $json
Write-Host "Outputs ConvertTo-Json:"
$json = ($deploymentResult.outputs) | ConvertTo-Json
Write-Host $json
Write-Host "Result.Value ConvertTo-Json:"
$json = ($deploymentResult.outputs.result.value) | ConvertTo-Json
Write-Host $json
Powershell输出:
VERBOSE: Performing the operation "Creating Deployment" on target "test4".
VERBOSE: 11:00:26 - Template is valid.
VERBOSE: 11:00:26 - Create template deployment '0521-100025'
VERBOSE: 11:00:26 - Checking deployment status in 5 seconds
DeploymentName : 0521-100025
ResourceGroupName : test4
ProvisioningState : Succeeded
Timestamp : 21/05/2020 10:00:26
Mode : Incremental
TemplateLink :
Parameters :
Outputs :
Name Type Value
=============== ========================= ==========
result Array [
"value1",
"value2"
]
DeploymentDebugLogLevel :
Key Value
--- -----
result Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Outputs: [result, Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable]
Outputs.value:
Outputs.values: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Outputs[0]:
Outputs[1]:
Outputs[0].value:
Outputs[1].value:
Outputs.result: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Outputs.result.value:
Outputs.result.values:
Outputs.result[0]: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Outputs.result[1]:
Outputs.result[0].value:
Outputs.result[1].value:
Outputs.result[0][0]: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Outputs.result.value1:
Outputs.result[0].value1:
Outputs.values: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Outputs.result.Count: 1
Outputs.result: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Outputs.result[0]: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Outputs['result']: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Deployment properties:
ResourceGroupName : test4
OnErrorDeployment :
DeploymentName : 0521-100025
CorrelationId : 10be00bb-fada-4b54-8749-87460672e9ec
ProvisioningState : Succeeded
Timestamp : 21/05/2020 10:00:26
Mode : Incremental
TemplateLink :
TemplateLinkString :
DeploymentDebugLogLevel :
Parameters : {}
ParametersString :
Outputs : {[result, Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable]}
OutputsString :
Name Type Value
=============== ========================= ==========
result Array [
"value1",
"value2"
]
Outputs properties:
Comparer : System.Collections.Generic.GenericEqualityComparer`1[System.String]
Count : 1
Keys : {result}
Values : {Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable}
IsReadOnly : False
IsFixedSize : False
SyncRoot : System.Object
IsSynchronized : False
Result properties:
Type : Array
Value : {, }
['Result'] properties:
Type : Array
Value : {, }
[array]['Result'] properties:
Type : Array
Value : {, }
Outputs.values properties:
Type : Array
Value : {, }
Result element: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
Values element: Microsoft.Azure.Commands.ResourceManager.Cmdlets.SdkModels.DeploymentVariable
JSON:
Deployment ConvertTo-Json:
{
"ResourceGroupName": "test4",
"OnErrorDeployment": null,
"DeploymentName": "0521-100025",
"CorrelationId": "10be00bb-fada-4b54-8749-87460672e9ec",
"ProvisioningState": "Succeeded",
"Timestamp": "\/Date(1590055226689)\/",
"Mode": 0,
"TemplateLink": null,
"TemplateLinkString": null,
"DeploymentDebugLogLevel": null,
"Parameters": {
},
"ParametersString": "",
"Outputs": {
"result": {
"Type": "Array",
"Value": "value1 value2"
}
},
"OutputsString": "\r\nName Type Value \r\n=============== ========================= ==========\r\nresult Array [\r\n \"value1\",\r\n \"value2\"\r\n]\r\n"
}
Outputs ConvertTo-Json:
{
"result": {
"Type": "Array",
"Value": [
"",
""
]
}
}
Result.Value ConvertTo-Json:
[
[
],
[
]
]
数组输出实际上是一个JArray。像这样访问结果:$deploymentResult.outputs.result.value[0].value
和$deploymentResult.outputs.result.value[1].value
。