2016-05-31 56 views
8

Şu anda VSTS kullanarak sürekli bir entegrasyon sistemi kurmaya çalışıyorum ve biraz takılmaya başladım. Yayınlama sürecinin bir parçası olarak, çevreye bağlı olarak JSON dosyasında belirli bir nesne değerini güncellemem gerekiyor. VSTS ortamında bunu yapabilmem için elimde olan tek araç PowerShell.PowerShell kullanarak güncelleme JSON dosyası

Çok fazla araştırma yaptım ve bunun nasıl yapılabileceğini anlayamadım. Bu soruyu buldum ve Stack Overflow "how do I update json file using powershell" cevabını buldum ama cevapta verilen betiği yürütmek JSON dosyasının yapısını önemli ölçüde değiştiriyor ve PowerShell metadata'larına benzeyen şeylerin birazını ekliyor.

İdeal olarak, dağıtılan ve aşağıdaki JSON örneğindeki connectionString özelliğinin değerini güncelleyen mevcut bir JSON dosyasını almak istiyorum.

{ 
    "policies": { 
     "Framework.DataContext": { 
     "connectionString": "Server=ServerName;Database=DateBaseName;Integrated Security=sspi;" 
     } 
    } 
} 

Bunu nasıl gerçekleştireceğiniz konusunda herhangi bir tavsiyede bulunur mu? Şimdiye kadar aşağıdaki komut dosyasını çalıştırmayı denedim ama "Bu özellik üzerinde 'connectionString' özelliği bulunamıyor. Özellik var olduğunu ve ayarlanabileceğini doğrulayın." istisna. Nesne geçişinin doğru olduğunu ve connectionString özelliğinin var olduğunu doğruladım. Şimdi böyle bir dosyayı güncelleyebilirsiniz

{ 
    "policies": { 
     "Framework.DataContext": { 
      "connectionString": "Server=ServerName;Database=DateBaseName;Integrated Security=sspi;" 
     } 
    } 
} 

: Sizin json

{ 
"log": { 
    "level": 0, 
    "file": "c:\\temp\\simport.log", 
    "formats": { 
     "error": null, 
     "start": null, 
     "requestBegin": null, 
     "requestWork": "", 
     "requestError": null, 
     "requestEnd": null, 
     "stop": null 
    }, 
    "eventLog": { 
     "name": "Application" 
    } 
}, 

"diagnostic": { 
    "stackTrace": false 
}, 

"api": { 
    "simport": true 
}, 

"roles": { 
    "0": "Anonymous", 
    "1": "Administrator", 
    "2": "Participant", 
    "3": "Facilitator" 
}, 

"pathType": { 
    "area": 1, 
    "region": 2, 
    "session": 3, 
    "team": 4 
}, 

"scenarios": { 
    "default": { 
     "default": true, 
     "initState": "Init", 
     "rounds": [ 
      { 
       "name": "round1", 
       "displayName": "R1", 
       "beginTime": 1, 
       "endTime": 3 
      }, 
      { 
       "name": "round2", 
       "displayName": "R2", 
       "beginTime": 4, 
       "endTime": 6 
      }, 
      { 
       "name": "round3", 
       "displayName": "R3", 
       "beginTime": 7, 
       "endTime": 9 
      }, 
      { 
       "name": "round4", 
       "displayName": "R4", 
       "beginTime": 10, 
       "endTime": 12 
      } 
     ] 
    } 
}, 

"simportQueries": { 
    "package": "bin/trc.simport3.zip" 
}, 

"customQueries": { 
    "package": "app/config/custom-queries.zip", 
    "parameters": { 
    } 
}, 

"audit": { 
    "Path.Create": true, 
    "Path.Delete": true, 
    "Team.Create": true, 
    "Team.Update": true, 
    "Team.Delete": true, 
    "SimportData.SaveValues": true 
}, 

"tasks": { 
    "task1": { 
     "state": "", 
     "required": "", 
     "completed": "C:Task1Status:+0" 
    } 
}, 

"feedback": { 
    "welcome": { 
     "text": { 
      "": "en-us", 
      "en-us": "Welcome" 
     } 
    } 
}, 

"contentCategories": { 
    "demo1": { 
     "round": 1 
    } 
}, 

"policies": { 
    "Simport.Web.Module": { 
     "fileMask": ".aspx,.asmx", 
     "deny": { 
      "statusCode": 404, 
      "statusDescription": "Not found", 
      "location": [ 
       "/{0,1}app/config/(.*\\.json)$", 
       "/{0,1}app/config/(.*\\.xml)$", 
       "/{0,1}app/config/(.*\\.zip)$", 
       "/{0,1}app/config/(.*\\.xlsx)$" 
      ] 
     }, 
     "formDataContentType": [ "application/x-www-form-urlencoded" ] 
    }, 

    "Framework.DataContext": { 
     "connectionString": "Server=(local);Database=Simport3;Integrated Security=sspi;", 
     "commandTimeout": 30 
    }, 

    "Simport.Security": { 
     "passwordEncryption": "", 
     "passwordSalt": "", 
     "passwordPolicy": { 
      "disabled": true, 
      "min": 8, 
      "max": 100, 
      "rules": [ 
       { "id": "digit", "pattern": "\\d+", "flags": "i" }, 
       { "id": "letter", "pattern": "\\w+", "flags": "i" }, 
       { "id": "upper", "pattern": "[A-Z]+" }, 
       { "id": "lower", "pattern": "[a-z]+" }, 
       { "id": "special", "pattern": "[\\!#@\\$_~]+", "flags": "i" }, 
       { "id": "prohibited", "pattern": "[\\\\/'\"\\?\\^&\\+\\-\\*\\%\\:;,\\.]+", "flags": "gi", "match": false } 
      ] 
     } 
    }, 

    "Simport.PackageDefinition": { 
     "path": "~/app/config/manifest.xml" 
    }, 

    "Security.SignIn": { 
     "result": { 
      "default": "u,p,p.props,t" 
     }, 
     "claims": [ 
      [ "userId", "firstName", "lastName" ] 
     ] 
    }, 

    "Security.GetContext": { 
     "result": { 
      "default": "u,p,p.props,pr,t" 
     } 
    }, 

    "Security.ChangePassword": { 
     "allowedRoles": [ 1, 2, 3 ] 
    }, 

    "Security.ResetPassword": { 
     "allowedRoles": [ 1, 2 ] 
    }, 

    "Security.Register": { 
     "allowedRoles": [ 0 ], 
     "!pathType-0": 4, 
     "!roleId-0": 2 
    }, 

    "Path.Create": { 
     "allowedRoles": [ 1, 2, 3 ] 
    }, 

    "Path.Select": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "result-1": { 
     } 
    }, 

    "Path.Delete": { 
     "allowedRoles": [ 1, 2 ] 
    }, 

    "User.Select": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "result": { 
      "select": [ "id", "pathid", "roleid", "name", "email", "login", "props" ], 
      "restrict": [ "password" ] 
     }, 
     "result-1": { 
      "select": "*", 
      "group": true 
     } 
    }, 

    "User.Create": { 
     "allowedRoles": [ 1, 2 ], 
     "result": { 
      "select": [ "id", "pathid", "roleid", "name", "email", "login", "props" ], 
      "restrict": [ "password" ] 
     }, 
     "result-1": { 
      "select": "*", 
      "group": true 
     } 
    }, 

    "User.Update": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "result": { 
      "select": [ "id", "pathid", "roleid", "name", "email", "login", "props" ], 
      "restrict": [ "password" ] 
     } 
    }, 

    "User.Delete": { 
     "allowedRoles": [ 1, 2 ], 
     "result": { 
      "restrict": [ "password" ] 
     } 
    }, 

    "Session.Select": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "enforcePathLevel": true, 
     "result": { 
      "default": [ "name", "beginDate", "endDate" ], 
      "restrict": [ "password" ] 
     }, 
     "result-1": { 
      "default": [ "name", "beginDate", "endDate" ], 
      "treeAllowed": true, 
      "treeDefault": false 
     } 
    }, 

    "Session.Create": { 
     "allowedRoles": [ 1, 2 ], 
     "enforcePathLevel": true 
    }, 

    "Session.Update": { 
     "allowedRoles": [ 1, 2 ], 
     "enforcePathLevel": true, 
     "update-restictions": [ "password" ], 
     "update-restictions-1": [ ], 
     "result": { 
      "restrict": [ "password" ] 
     } 
    }, 

    "Session.Delete": { 
     "allowedRoles": [ 1, 2 ], 
     "result": { 
      "restrict": [ "password" ] 
     } 
    }, 

    "Team.Select": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "enforcePathLevel": false, 
     "enforcePathLevel-1": true, 
     "result-1": { 
      "treeAllowed": true, 
      "treeDefault": false 
     } 
    }, 

    "Team.Create": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "enforcePathLevel": true, 
     "enforcePathLevel-1": false, 
     "allowMultiple": false, 
     "allowMultiple-1": true, 
     "result": { 
     }, 
     "overrides": { 
      "roleID": 3 
     } 
    }, 

    "Team.Reset": { 
     "allowedRoles": [ 1, 2, 3 ] 
    }, 

    "Team.Delete": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "deleteMultiple": true, 
     "result": { 
      "default": "t" 
     } 
    }, 

    "Team.TransitionTo": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "inboundRules": { 
      "Round1Init": { 
       "allowedRoles": [ ] 
      } 
     }, 
     "outboundRules": { 
      "Round1Wait": { 
       "allowedRoles": [ 1, 2, 3 ] 
      } 
     } 
    }, 

    "Team.TakeControl": { 
     "allowedRoles": [ 1, 2, 3, 4 ], 
     "select-1": { 
      "select": "*", 
      "restrict": [ "ctrl.userID", "ctrl.loginName" ] 
     } 
    }, 

    "Team.ReleaseControl": { 
     "allowedRoles": [ 1, 2, 3, 4 ], 
     "select-1": { 
      "select": "*", 
      "restrict": [ "ctrl.userID", "ctrl.loginName" ] 
     } 
    }, 

    "Team.GetStatus": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "result": { 
      "default": "p,t,pr" 
     } 
    }, 

    "Data.Select": { 
     "allowedRoles": [ 1, 2, 3 ] 
    }, 

    "Data.Update": { 
     "allowedRoles": [ 1, 2, 3 ], 
     "audit": { 
      "g": false, 
      "i": true, 
      "o": true, 
      "s": true 
     } 
    }, 

    "Data.ExecuteQuery": { 
     "allowedRoles": [ 0, 1, 2, 3 ], 
     "allowed-0": [ "login4\\areas", "login4\\regions", "login4\\sessions", "login4\\teams" ], 
     "restrict-3": [ "prohibitedQueryNameHere" ] 
    }, 

    "Document.Select": { 
     "defaultTextEncoding": "utf-16" 
    }, 

    "Document.Create": { 
     "~allowFileExt": [ ], 
     "denyFileExt": [ ".exe", ".com", ".cmd", ".bat", ".ps1" ], 
     "~allowContentType": [ ], 
     "denyContentType": [ "application/x-msdownload" ], 
     "maxContentLength": 0, 
     "defaultTextEncoding": "utf-16" 
    }, 

    "Document.Update": { 
     "allowedRoles": [ 1, 2, 3 ] 
    }, 

    "Document.Delete": { 
    }, 

    "Document.Download": { 
    } 
} 
} 

cevap

10

başlangıç ​​eksik ve süslü parantez sona eriyor şöyle file.json ait

$pathToJson = "D:\Path\To\JSON\file.json" 
$a = Get-Content $pathToJson | ConvertFrom-Json 
$a.policies.'Framework.DataContext'.connectionString = "Server=ServerName;Database=DateBaseName;Integrated Security=sspi;" 
$a | ConvertTo-Json | set-content $pathToJson 

tam içeriği vardır :

$pathToJson = "F:\Path\To\JSON\file.json" 
$a = Get-Content $pathToJson | ConvertFrom-Json 
$a.policies.'Framework.DataContext'.connectionString = "Server=ServerName;Database=DateBaseName;Integrated Security=sspi2;" 
$a | ConvertTo-Json | set-content $pathToJson 

Ayrıca mülk almak için bazı Select-Object kullanabilirsiniz: Cevabınız için

$connectionString = $a | select -expand policies | select -expand Framework.DataContext 
$connectionString.connectionString = 'Test' 
+0

teşekkür ederiz. Küme parantezini ve şimdi aldığım istisnayı yansıtacak şekilde güncelledim. – pstricker

+0

Json'u saklayıp yolu değiştirirseniz, komut dosyaları beklendiği gibi çalışır. Hangi PowerShell sürümünü kullanıyorsunuz? Başka bir şey değiştirdin mi? –

+0

Aşağıdaki PowerShell 5'i çalıştırıyorum – pstricker

0
$s = Get-Content "F:\Path\To\JSON\file.json" -Raw|ConvertFrom-Json 
$s.policies.'Framework.DataContext'.connectionString="Server=ServerName;Database=DateBaseName;Integrated Security=sspi2;" 
$s|ConvertTo-Json |Set-Content "F:\Path\To\JSON\file.json"