Извлечение переменных из вызова значения - получение сообщения об ошибке в условии
Я пытаюсь сделать проверку. проверка развернутых значений с заданными значениями. Я извлекаю значения 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 ответ
В моей попытке воссоздать ваш invoke-restmethod
вывод, я использовал ваш JSON-пакет в качестве входных данных для создания $vnet
переменная.
Я считаю, что проблема в том, что вы используете Write-host
отображать объект, а не просто имя объекта. Write-host
попытается преобразовать сложный объект в строку и, следовательно, вы увидите странный вывод, как вы можете видеть ниже. видите разницу, когда я просто выхожу из объекта?
В настоящее время, $vnet
имеет 4 свойства id, name, properties, type
и может быть вызван как показано. В вашем случае вы конвертировали переменную $vnet
в json
а затем пытается отобразить его свойства. Но Json
не имеет никаких свойств, кроме length
, И, следовательно, вызов этих свойств даст вам ноль.