使用powershell脚本替换整个json对象



我正在尝试从一个环境部署json文件到另一个。但是我必须在部署时替换一些对象的属性。

为了实现这一点,我试图替换整个json对象,因为我必须替换大部分属性。我正在使用shell脚本来替换json对象,但无法这样做。

是源代码中的json文件。

},
{
"name": "[concat(parameters('factoryName'), '/AzureDataLakeStore1')]",
"type": "Microsoft.DataFactory/factories/linkedServices",
"apiVersion": "2018-06-01",
"properties": {
"annotations": [],
"type": "AzureDataLakeStore",
"typeProperties": {
"dataLakeStoreUri": "[parameters('AzureDataLakeStore1_properties_typeProperties_dataLakeStoreUri')]",
"servicePrincipalId": "[parameters('AzureDataLakeStore1_properties_typeProperties_servicePrincipalId')]",
"servicePrincipalKey": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "eXtollokeyvault",
"type": "LinkedServiceReference"
},
"secretName": "[parameters('AzureDataLakeStore1_properties_typeProperties_servicePrincipalKey_secretName')]"
},
"tenant": "[parameters('AzureDataLakeStore1_properties_typeProperties_tenant')]",
"subscriptionId": "[parameters('AzureDataLakeStore1_properties_typeProperties_subscriptionId')]",
"resourceGroupName": "[parameters('AzureDataLakeStore1_properties_typeProperties_resourceGroupName')]"
},
"connectVia": {
"referenceName": "coe-eu-ir-azu-xbs",
"type": "IntegrationRuntimeReference"
}
},
"dependsOn": [
"[concat(variables('factoryId'), '/integrationRuntimes/coe-eu-ir-azu-xbs')]",
"[concat(variables('factoryId'), '/linkedServices/eXtollokeyvault')]"
]
},
{
"name": "[concat(parameters('factoryName'), '/AzureDataLakeStore2')]",
"type": "Microsoft.DataFactory/factories/linkedServices",
"apiVersion": "2018-06-01",
"properties": {
"annotations": [],
"type": "AzureDataLakeStore",
"typeProperties": {
"dataLakeStoreUri": "[parameters('AzureDataLakeStore2_properties_typeProperties_dataLakeStoreUri')]",
"servicePrincipalId": "[parameters('AzureDataLakeStore2_properties_typeProperties_servicePrincipalId')]",
"servicePrincipalKey": {
"type": "AzureKeyVaultSecret",
"store": {
"referenceName": "eXtollokeyvault",
"type": "LinkedServiceReference"
},
"secretName": "[parameters('AzureDataLakeStore2_properties_typeProperties_servicePrincipalKey_secretName')]"
},
"tenant": "[parameters('AzureDataLakeStore2_properties_typeProperties_tenant')]",
"subscriptionId": "[parameters('AzureDataLakeStore2_properties_typeProperties_subscriptionId')]",
"resourceGroupName": "[parameters('AzureDataLakeStore2_properties_typeProperties_resourceGroupName')]"
},
"connectVia": {
"referenceName": "coe-eu-ir-azu-xbs",
"type": "IntegrationRuntimeReference"
}
},
"dependsOn": [
"[concat(variables('factoryId'), '/integrationRuntimes/coe-eu-ir-azu-xbs')]",
"[concat(variables('factoryId'), '/linkedServices/eXtollokeyvault')]"
]
},

我必须用名称更改整个对象

"name": "[concat(parameters('factoryName'), '/AzureDataLakeStore1')]",
名称为的整个对象name": "[concat(parameters('factoryName'), '/AzureDataLakeStore1')]",应该像下面这样
},
{
"name": "[concat(parameters('factoryName'), '/AzureDataLakeStore1')]",
"type": "Microsoft.DataFactory/factories/linkedServices",
"apiVersion": "2018-06-01",
"properties": {
"annotations": [],
"type": "AzureBlobFS",
"typeProperties": {
"url": "[parameters('AzureDataLakeStore1_v2_properties_typeProperties_url')]"
},
"connectVia": {
"referenceName": "coe-eu-ir-azu-xbs",
"type": "IntegrationRuntimeReference"
}
},
"dependsOn": [
"[concat(variables('factoryId'), '/integrationRuntimes/coe-eu-ir-azu-xbs')]"
]
},

必须像上面那样替换整个对象。

我已经尝试用powershell脚本删除对象。属性,但不能按我的要求创建对象。

$JsonData = Get-Content $json_path -raw | ConvertFrom-Json
$JsonData.resources | Where{$_.name -eq "[concat(parameters('factoryName'), '/AzureDataLakeStore1')]"} | ForEach{$_.PSObject.Properties.remove("properties")}
$JsonData.resources | Where{$_.name -eq "[concat(parameters('factoryName'), '/AzureDataLakeStore1')]"} | ForEach{$_.PSObject.Properties.remove("dependsOn")}
$JsonData | ConvertTo-Json -depth 50| % {[System.Text.RegularExpressions.Regex]::Unescape($_)} | set-content $json_path

有办法做到这一点吗?

Azure Devops是一种简单的方法来更改链接的服务属性,您可以为每个环境创建变量,然后在您的部署管道(发布管道)中提到

这是一个演示

最新更新