Извлечение переменных из вызова значения - получение сообщения об ошибке в условии - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь сделать проверку.проверка развернутых значений с заданными значениями.Я извлекаю значения vnet из ресурсов Azure, используя метод RestAPI, и convertto-json из Object, потому что объект vnet дает мне пустой объект (@ {value = System.Object []}).Ниже приведен код Json, который я получаю:

{
  "value": [
    {
      "properties": "@{virtualNetworkSubnetId=/subscriptions/<XXXX>/resourceGroups/<XXXX>/providers/Microsoft.Network/virtualNetworks/<XXXX>/subnets/<XXXX>; ignoreMissingVnetServiceEndpoint=True; state=Ready}",
      "id": "/subscriptions/<XXXX>/resourceGroups/<XXXX>/providers/Microsoft.DBforPostgreSQL/servers/<XXXX>/virtualNetworkRules/<XXXX>",
      "name": "<XXXX>",
      "type": "Microsoft.DBforPostgreSQL/servers/virtualNetworkRules"
    }
  ]
}

Следующая команда powershell предназначена для сравнения значения, но при этом появляется сообщение об ошибке, в котором $ vnet.name и $ vnet.id равны $ null

$vnet= ( $vnet | ConvertTo-Json)

   It "has this number of vNet Rules defined: $($config.vnetRules.count)" 
  {
    $vnet.count | Should -Be $config.vnetRules.count    
   }

   #$vnet.count is working and giving an success message

   foreach ($vnetRule in $config.vNetRules) {

    Write-Host $vnet            #-> getting Json 
    Write-Host $vnet.Name       #-> return as Empty($null)
        Write-Host $vnet.value.Name #-> return as Empty($null)
    Write-Host $vnet.id         #-> return as Empty($null)
        Write-Host $vnet.value.id   #-> return as Empty($null)

    it "has a vNet rule named: $($vnetRule.ruleName)" {
        $vnet.name | Should -Be $vnetRule.ruleName
    }

    it "has a vNet Rule Subnet ID of: $($vNetRule.subnetId)" {
        $vnet.value.id | Should -Be $vNetRule.subnetId
    }

}

Возвращает $ null.

1 Ответ

0 голосов
/ 25 июня 2019

В попытке воссоздать ваш вывод invoke-restmethod я использовал ваш пакет JSON в качестве ввода для создания переменной $vnet.

Я считаю, что проблема в том, что вы используете Write-host для отображения объекта, а не просто имени объекта. Write-host попытается преобразовать сложный объект в строку, и, следовательно, вы увидите странный вывод, как вы можете видеть ниже. видите разницу, когда я просто выхожу из объекта?

enter image description here

Теперь $vnet имеет 4 свойства id, name, properties, type и может быть вызвано, как показано. В вашем случае вы преобразовали переменную $vnet в json и затем пытаетесь отобразить ее свойства. Но Json не имеет никаких свойств, кроме length. И, следовательно, вызов этих свойств даст вам ноль.

enter image description here

...