pwsh/dev/functions/processHierarchyMapOnlyCustomData.ps1 (65 lines of code) (raw):

function processHierarchyMapOnlyCustomData { Write-Host 'HierarchyMapOnly with custom data' -ForegroundColor Yellow Write-Host ' Parameter HierarchyMapOnly:' $HierarchyMapOnly Write-Host ' Check if HierarchyMapOnlyCustomDataJSON is valid JSON' try { $HierarchyMapOnlyCustomDataConvertedAsHashTable = $HierarchyMapOnlyCustomDataJSON | ConvertFrom-Json -AsHashtable $hierarchyMapOnlyCustomData = @{} foreach ($key in $HierarchyMapOnlyCustomDataConvertedAsHashTable.Keys) { $hierarchyMapOnlyCustomData.$key = $HierarchyMapOnlyCustomDataConvertedAsHashTable.$key | ConvertTo-Json | ConvertFrom-Json } Write-Host ' HierarchyMapOnlyCustomDataJSON is valid JSON' -ForegroundColor Green } catch { throw 'HierarchyMapOnlyCustomDataJSON is not valid JSON' } Write-Host ' Parameter hierarchyMapOnlyCustomData count:' $hierarchyMapOnlyCustomData.Keys.Count #validate Write-Host ' ManagementGroupId validation' if (-not $ManagementGroupId) { throw 'ManagementGroupId validation failed - please provide ManagementGroupId (parameter -ManagementGroupId)' } else { if ($hierarchyMapOnlyCustomData.$ManagementGroupId) { Write-Host " ManagementGroupId '$ManagementGroupId' is available in 'hierarchyMapOnlyCustomData'" } else { throw "ManagementGroupId validation failed - Given ManagementGroupId '$ManagementGroupId' is NOT available in 'hierarchyMapOnlyCustomData'" } Write-Host " ManagementGroupId validation passed '$ManagementGroupId'" -ForegroundColor Green } Write-Host ' CustomData validation' if ($hierarchyMapOnlyCustomData.Keys.Count -gt 0) { Write-Host ' Checking Keys (sanity check on first item)' $requiredKeys = @('Id', 'ParentId', 'ParentNameChain', 'ParentDisplayName', 'DisplayName', 'type') $firstItem = $hierarchyMapOnlyCustomData.($($hierarchyMapOnlyCustomData.Keys)[0]) foreach ($requiredKey in $requiredKeys) { if (($firstitem | Get-Member -Name $requiredKey)) { Write-Host " Key:$($requiredKey) exists" -ForegroundColor Green } else { Write-Host " CustomData validation failed - required key:$($requiredKey) missing" -ForegroundColor DarkRed Write-Host " The following keys are expected: $($requiredKeys -join ', ')" throw "CustomData validation failed - required key:$($requiredKey) missing" } } Write-Host ' Checking for existence of Management Groups' $HierarchyMapOnlyCustomDataHroupedByType = $hierarchyMapOnlyCustomData.values | Group-Object -Property type if ($HierarchyMapOnlyCustomDataHroupedByType.Name -notcontains 'Microsoft.Management/managementGroups') { Write-Host ' CustomData validation failed - Custom data does not contain Manangement Groups' throw 'CustomData validation failed - Custom data does not contain Manangement Groups' } else { Write-Host ' Checking for existence of Management Groups passed' -ForegroundColor Green } foreach ($type in $HierarchyMapOnlyCustomDataHroupedByType) { Write-Host " Custom Data contains $($type.Count) x type: '$($type.name)'" } Write-Host ' CustomData validation passed' -ForegroundColor Green } else { Write-Host " CustomData validation failed - no data (`$hierarchyMapOnlyCustomData.Keys.Count: $($hierarchyMapOnlyCustomData.Keys.Count))" throw "CustomData validation failed - no data (`$hierarchyMapOnlyCustomData.Keys.Count: $($hierarchyMapOnlyCustomData.Keys.Count))" } $script:htEntities = $hierarchyMapOnlyCustomData }