Update json file property value using powershell version 5

67 views Asked by At

I am trying to set the property resources[0].properties.networkAcls.ipRules with values from another text file which has list of IP addresses. I am able to do that using powershell 7 but not able to do it with powershell 5 as it does not have depth parameter for ConvertTo-Json and ConvertFrom-Json.

# text file named ipv4.txt in current directory has ip list 

$templateJson = Get-Content "myTemplate.json" | ConvertFrom-Json -Depth 100
$ipObject = @()
# Construct object for each ip present in ipv4.txt file and and assign it to $ipObject
foreach($line in Get-Content .\ipv4.txt) {
    $ipObject += [pscustomobject]@{value=$line;action='Allow'}
}
$storageAccountsResource =  $templateJson.resources | Where-Object  {$_.type -eq "Microsoft.Storage/storageAccounts" }

$storageAccountsResource.properties.networkAcls.ipRules = $ipObject 
$templateJson | ConvertTo-Json -depth 100| set-content "myTemplate.json"

In the output I am getting weird formatting for json file like below

    {
    "$schema":  "https://schema.management.azure.com/schemas/2019-04-01/abc.json#",
    "contentVersion":  "1.0.0.0",
    "parameters":  {
                       "myStorageAccountName":  {
                                                    "type":  "string",
                                                    "defaultValue":  "mydefaultValue"
                                                }
                   },
    "resources":  [
                      {
                          "type":  "Microsoft.Storage/storageAccounts",
                          "kind":  "StorageV2",
                          "name":  "[parameters(\u0027myStorageAccountName\u0027)]",
                          "apiVersion":  "2021-09-01",
                          "properties":  "@{networkAcls=; supportsHttpsTrafficOnly=True; encryption=; accessTier=Hot}"
                      },
                      {
                          "type":  "Microsoft.Storage/storageAccounts/tableServices",
                          "apiVersion":  "2021-09-01",
                          "name":  "[concat(parameters(\u0027myStorageAccountName\u0027), \u0027/default\u0027)]",
                          "dependsOn":  "[resourceId(\u0027Microsoft.Storage/storageAccounts\u0027, parameters(\u0027myStorageAccountName\u0027))]",
                          "properties":  "@{cors=}"
                      }
                  ]
}

myTemplate.json file

 {
   "$schema": "https://schema.management.azure.com/schemas/2019-04-01/abc.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "myStorageAccountName": {
         "type": "string",
         "defaultValue": "mydefaultValue" 
      }
   },
   "resources": [
      {
         "type": "Microsoft.Storage/storageAccounts",
         "kind": "StorageV2",
         "name": "[parameters('myStorageAccountName')]",
         "apiVersion": "2021-09-01",
         "properties": {
           "networkAcls": {
               "resourceAccessRules": [],
               "bypass": "AzureServices",
               "virtualNetworkRules": [],
               "ipRules": [],
               "defaultAction": "Allow"
            },
            "supportsHttpsTrafficOnly": true,
            "encryption": {
               "services": {
                  "file": {
                     "keyType": "Account",
                     "enabled": true
                  },
                  "blob": {
                     "keyType": "Account",
                     "enabled": true
                  }
               },
               "keySource": "Microsoft.Storage"
            },
            "accessTier": "Hot"
         }
      },
      {
         "type": "Microsoft.Storage/storageAccounts/tableServices",
         "apiVersion": "2021-09-01",
         "name": "[concat(parameters('myStorageAccountName'), '/default')]",
         "dependsOn": [
            "[resourceId('Microsoft.Storage/storageAccounts', parameters('myStorageAccountName'))]"
         ],
         
         "properties": {
            "cors": {
               "corsRules": []
            }
         }
      }
   ]
}

Expected output which I could achieve using PS7:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/abc.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "myStorageAccountName": {
      "type": "string",
      "defaultValue": "mydefaultValue"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "kind": "StorageV2",
      "name": "[parameters('myStorageAccountName')]",
      "apiVersion": "2021-09-01",
      "properties": {
        "networkAcls": {
          "resourceAccessRules": [],
          "bypass": "AzureServices",
          "virtualNetworkRules": [],
          "ipRules": [
            {
              "value": "173.245.48.0/20",
              "action": "Allow"
            },
            {
              "value": "103.21.244.0/22",
              "action": "Allow"
            },
            {
              "value": "103.22.200.0/22",
              "action": "Allow"
            },
            {
              "value": "103.31.4.0/22",
              "action": "Allow"
            },
            {
              "value": "141.101.64.0/18",
              "action": "Allow"
            },
            {
              "value": "108.162.192.0/18",
              "action": "Allow"
            },
            {
              "value": "190.93.240.0/20",
              "action": "Allow"
            },
            {
              "value": "188.114.96.0/20",
              "action": "Allow"
            },
            {
              "value": "197.234.240.0/22",
              "action": "Allow"
            },
            {
              "value": "198.41.128.0/17",
              "action": "Allow"
            },
            {
              "value": "162.158.0.0/15",
              "action": "Allow"
            },
            {
              "value": "104.16.0.0/13",
              "action": "Allow"
            },
            {
              "value": "104.24.0.0/14",
              "action": "Allow"
            },
            {
              "value": "172.64.0.0/13",
              "action": "Allow"
            },
            {
              "value": "131.0.72.0/22",
              "action": "Allow"
            }
          ],
          "defaultAction": "Allow"
        },
        "supportsHttpsTrafficOnly": true,
        "encryption": {
          "services": {
            "file": {
              "keyType": "Account",
              "enabled": true
            },
            "blob": {
              "keyType": "Account",
              "enabled": true
            }
          },
          "keySource": "Microsoft.Storage"
        },
        "accessTier": "Hot"
      }
    },
    {
      "type": "Microsoft.Storage/storageAccounts/tableServices",
      "apiVersion": "2021-09-01",
      "name": "[concat(parameters('myStorageAccountName'), '/default')]",
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('myStorageAccountName'))]"
      ],
      "properties": {
        "cors": {
          "corsRules": []
        }
      }
    }
  ]
}
0

There are 0 answers