我正在尝试使用PowerShell对JSON文件执行一些配置转换。为此,有几个输入 json 文件和一个转换文件(每个环境一个(。
输入样本 ( AzureStorage.json
(:
{
"$schema": "http://datafactories.schema.management.azure.com/schemas/2015-09-01/Microsoft.DataFactory.LinkedService.json",
"name": "AzureStorage",
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": "My Connection String here"
} } }
变换:
{
"$schema": "http://datafactories.schema.management.azure.com/vsschemas/V1/Microsoft.DataFactory.Config.json",
"AzureStorage": [
{
"name": "$.properties.typeProperties.connectionString",
"value": "DefaultEndpointsProtocol=https;AccountName=mytestaccount;AccountKey=d;lasfjdalfdjfldjfdsfds;EndpointSuffix=core.windows.net"
}
],
"DataLakeStore": [
{
"name": "$.properties.typeProperties.dataLakeStoreUri",
"value": "https://mydatalake.azuredatalakestore.net/webhdfs/v1"
}
]
}
我需要做的是加载转换文件,然后遍历它,找到我需要转换的输入文件的名称(在本例中为 AzureStorage.json
和 DataLakeStore.json
(。
接下来,我需要相应地替换属性。 我正在尝试通过使用 ConvertFrom-Json
将转换文件加载到变量中来做到这一点,但我不确定之后如何遍历它。
我不知道你到底需要什么帽子。 我猜可以访问 JSON 文件中的信息。
这种方法呢?
$json_object = Get-Content -Raw -Path '<your_path>transform.json' | ConvertFrom-Json
$azure_storage = @('AzureStorage'; 'DataLakeStore')
ForEach ($azure in $json_object) {
ForEach ($storage in $azure_storage) {
Write-Output $azure.$storage.name
Write-Output $azure.$storage.value
}
}
编辑 由于编辑我得到了它。 您需要通用访问权限。
给你:
$json_object = (Get-Content -Path '<your_path>transform.json') -join "`n" | ConvertFrom-Json
ForEach ($object in $json_object.PsObject.Properties) {
Write-Output $object.name
Write-Output $object.value
}
解释: (Get-Content -Path '<your_path>transform.json') -join "
n"' 是Microsoft的 MSDN 推荐的读取 JSON 文件的方法。
您需要找出值的位置。 您正在使用的对象是"Windows PowerShell 自定义对象" - PsObject。 要访问 您需要使用 .Properties.value
. 然后你有你想要的字符串,你可以使用 .name
和 .value
.