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": []
}
}
}
]
}