powershell 检查az命令的输出以查看是否返回值

brc7rcf0  于 2023-10-18  发布在  Shell
关注(0)|答案(1)|浏览(145)

我得到了下面的代码,它工作正常,但是我检查是否找到vnet配对的方式有点错误。
这就是代码的样子。

$existing_peering = az network vnet peering show -g 'xx' -n 'ccc' --vnet-name 'ccc'

      if ($existing_peering) {
          write-output 'Peering exists'
   
      }

$existing_peering的输出如下。

{
  "allowForwardedTraffic": true,
  "allowGatewayTransit": true,
  "allowVirtualNetworkAccess": true,
  "doNotVerifyRemoteGateways": false,
  "etag": "W/\"xxxxxx\"",
  "id": "/subscriptions/fdfd",
  "name": "xxxx",
  "peeringState": "Disconnected",
  "peeringSyncLevel": "FullyInSync",
  "provisioningState": "Succeeded",
  "remoteAddressSpace": {
    "addressPrefixes": [
      "10.77.0.0/16"
    ]
  },
  "remoteBgpCommunities": null,
  "remoteVirtualNetwork": {
    "id": "/subscriptions/",
    "resourceGroup": "my-rg"
  },
  "remoteVirtualNetworkAddressSpace": {
    "addressPrefixes": [
      "10.77.0.0/16"
    ]
  },
  "remoteVirtualNetworkEncryption": null,
  "resourceGroup": "cccc",
  "resourceGuid": "ggggggggggg",
  "type": "Microsoft.Network/virtualNetworks/virtualNetworkPeerings",
  "useRemoteGateways": false
}

我想得到name的值和if语句的求值方式,我不确定这是否是正确的方法,有时我发现如果AZ找不到对象,if $existing_peering的值可能是一个错误消息,而不是预期的返回对象,当IF语句求值时,它可能做了错误的事情。

xcitsw88

xcitsw881#

我已经创建了虚拟网络和对等的vnet与名称vnet1-vnet2如下:

要获取name的值,您可以使用以下命令:

$existing_peering = az network vnet peering show -g "<RGName>" -n "<PeeredvnetName>" --vnet-name "<VnetName>" --query "name" --output tsv

if ($existing_peering) {
    Write-Output "Peering exists: $existing_peering"
} else {
    Write-Output "Peering does not exist"
}
  • 输出 *:

或者像 Abraham Zinala 建议的那样,你可以使用ConvertFrom-Json通过修改如下脚本将其转换为对象:

$existing_peerings = az network vnet peering show -g "xxxx" -n "xxxx" --vnet-name "xxx" | ConvertFrom-Json

foreach ($peering_info in $existing_peerings) {
    if ($peering_info.name) {
        Write-Output 'Peering exists'
        # You can access other properties like $peering_info.name here
    }
}

输出

相关问题