使用New-AzureRmResourceGroupDeployment时无法在Powershell中检索ARM输出阵列

问题描述 投票:0回答:1

我有一个简单的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:
[
    [

    ],
    [

    ]
]
arrays json azure powershell azure-resource-manager
1个回答
0
投票

数组输出实际上是一个JArray。像这样访问结果:$deploymentResult.outputs.result.value[0].value$deploymentResult.outputs.result.value[1].value

更多信息:PowerShell -- Accessing a JArray inside a JObject

© www.soinside.com 2019 - 2024. All rights reserved.