마치 작동하도록 기대하는 것처럼 보입니다. 여러 객체가 반환되기를 원하지만 하나만 반환하는 것으로 보입니다. 내가하는 일은 내가 할 수없는 일이다.ConvertFrom-JSON을 객체로
아주 간단한 JSON 파일 :
나는 동적으로 (즉, 위의 데이터를 다음과 같을 것이다) 멋진 pscustomobject에 매개 변수와 그 값을 추가 할{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"value": "sa01"
},
"virtualNetworkName": {
"value": "nvn01"
}
}
}
:
ParameterName | Value
===========================
storageAccountName | sa01
virtualNetworkName | nvn01
$TemplateParametersFile = "C:\Temp\deploy-Project-Platform.parameters.json"
$content = Get-Content $TemplateParametersFile -Raw
$JsonParameters = ConvertFrom-Json -InputObject $content
$JsonParameters.parameters | Measure-Object
:
내가 이해할 수없는 것은 왜 다음 반환 한 개체입니다 이 글을 쓰는 동안 필자는 필자가 원하는 바를 얻는 해결책을 찾았습니다. 답변 섹션에 게시하겠습니다.
<#
# Read in JSON from file on disk
$TemplateParametersFile = "C:\Temp\deploy-Project-Platform.parameters.json"
$content = Get-Content $TemplateParametersFile -Raw
#>
#Retrieve JSON file from Azure storage account.
$TemplateParametersFile = "https://{storageAccountName}.blob.core.windows.net/{SomeContainer}/deploy-Project-Platform.parameters.json"
$oWc = New-Object System.Net.WebClient
$webpage = $oWc.DownloadData($TemplateParametersFile)
$content = [System.Text.Encoding]::ASCII.GetString($webpage)
#Convert JSON file to an object (IMHO- Sort of!)
$JsonParameters = ConvertFrom-Json -InputObject $content
#Build hashtable - easier to add new items - the whole purpose of this script
$oDataHash = @{}
$JsonParameters.parameters | Get-Member -MemberType NoteProperty | ForEach-Object{
$oDataHash += @{
$_.name = $JsonParameters.parameters."$($_.name)" | Select -ExpandProperty Value
}
}
#Example: adding a single item to the hashtable
$oDataHash.Add("VirtualMachineName","aDemoAdd")
#Convert hashtable to pscustomobject
$oData = New-Object -TypeName PSCustomObject
$oData | Add-Member -MemberType ScriptMethod -Name AddNote -Value {
Add-Member -InputObject $this -MemberType NoteProperty -Name $args[0] -Value $args[1]
}
$oDataHash.Keys | Sort-Object | ForEach-Object{
$oData.AddNote($_,$oDataHash.$_)
}
$oData
그리고 결과 : 위의 그림과 같이 같은 JSON 파일을 사용하여 ...
아름다운! 어떻게하면 알 수 있을까요? 왜 "숨겨진"것입니까? 누락 된 인용문에 대해 죄송합니다. 나는 원래의 null 값을 변경했다. 여전히 JSON 구문에 익숙해졌습니다. 원래 질문으로 업데이트되었습니다. – woter324
글쎄, PowerShell은 기본적으로 많은 것을 숨 깁니다. 그들이 당신에게 당신이 항상 접근 할 수있는 모든 것을 보여 주었다면 그것은 압도적이었을 것입니다. 나는 그것이 당신의 커스텀 객체가 파생 된 기본 객체를 참조하기 때문에 숨겨져 있다고 믿는다. 그러나 틀릴 수도있다. 'PSObject'를'| '로 파이프해야합니다. Get-Member -Force'를 방문하고 주변을 둘러 보면, 당신이 그 방법으로 작업하는 객체에 대해 많은 것을 배울 수 있습니다. – TheMadTechnician