Skip to content

Commit 42618ac

Browse files
Merge pull request #256 from mthreer/master
Handling null valued quotaId
2 parents 1ad943a + 9fcaf47 commit 42618ac

File tree

6 files changed

+115
-87
lines changed

6 files changed

+115
-87
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,9 @@ The [Azure Governance Visualizer accelerator](https://github.com/Azure/Azure-Gov
8484

8585
## Release history
8686

87-
**Changes** (2024-August-28 / 6.5.2 Patch)
87+
**Changes** (2024-September-17 / 6.5.3 Patch)
8888

89-
- AAD -> EntraId
89+
- fix stop error for subscriptions with null valued quotaId. the function detailSubscription uses `.startsWith()` method to check for `AAD_` but cannot validate when a null-valued `.quotaId` occurs.
9090

9191
[Full release history](history.md)
9292

history.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
### Azure Governance Visualizer version 6
66

7+
**Changes** (2024-September-17 / 6.5.3 Patch)
8+
9+
- fix stop error for subscriptions with null valued quotaId. the function detailSubscription uses `.startsWith()` method to check for `AAD_` but cannot validate when a null-valued `.quotaId` occurs.
10+
711
**Changes** (2024-August-28 / 6.5.2 Patch)
812

913
- AAD -> EntraId

pwsh/AzGovVizParallel.ps1

Lines changed: 54 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ Param
365365
$Product = 'AzGovViz',
366366

367367
[string]
368-
$ProductVersion = '6.5.2',
368+
$ProductVersion = '6.5.3',
369369

370370
[string]
371371
$GithubRepository = 'aka.ms/AzGovViz',
@@ -2435,63 +2435,75 @@ function detailSubscriptions {
24352435
foreach ($childrenSubscription in $childrenSubscriptions) {
24362436

24372437
$sub = $htAllSubscriptionsFromAPI.($childrenSubscription.name)
2438-
if ($sub.subDetails.subscriptionPolicies.quotaId.startswith('AAD_', 'CurrentCultureIgnoreCase') -or $sub.subDetails.state -ne 'Enabled') {
2439-
if (($sub.subDetails.subscriptionPolicies.quotaId).startswith('AAD_', 'CurrentCultureIgnoreCase')) {
2440-
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
2441-
subscriptionId = $childrenSubscription.name
2442-
subscriptionName = $childrenSubscription.properties.displayName
2443-
outOfScopeReason = "QuotaId: AAD_ (State: $($sub.subDetails.state))"
2444-
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
2445-
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
2446-
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
2447-
})
2448-
}
2449-
if ($sub.subDetails.state -ne 'Enabled') {
2450-
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
2451-
subscriptionId = $childrenSubscription.name
2452-
subscriptionName = $childrenSubscription.properties.displayName
2453-
outOfScopeReason = "State: $($sub.subDetails.state)"
2454-
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
2455-
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
2456-
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
2457-
})
2458-
}
2438+
if ($sub.subDetails.subscriptionPolicies.quotaId -eq $null) {
2439+
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
2440+
subscriptionId = $childrenSubscription.name
2441+
subscriptionName = $childrenSubscription.properties.displayName
2442+
outOfScopeReason = 'QuotaId: null'
2443+
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
2444+
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
2445+
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
2446+
})
24592447
}
24602448
else {
2461-
if ($SubscriptionQuotaIdWhitelist[0] -ne 'undefined') {
2462-
$whitelistMatched = 'unknown'
2463-
foreach ($subscriptionQuotaIdWhitelistQuotaId in $SubscriptionQuotaIdWhitelist) {
2464-
if (($sub.subDetails.subscriptionPolicies.quotaId).startswith($subscriptionQuotaIdWhitelistQuotaId, 'CurrentCultureIgnoreCase')) {
2465-
$whitelistMatched = 'inWhitelist'
2466-
}
2467-
}
2468-
2469-
if ($whitelistMatched -eq 'inWhitelist') {
2470-
#write-host "$($childrenSubscription.properties.displayName) in whitelist"
2471-
$null = $script:subsToProcessInCustomDataCollection.Add([PSCustomObject]@{
2449+
if ($sub.subDetails.subscriptionPolicies.quotaId.startswith('AAD_', 'CurrentCultureIgnoreCase') -or $sub.subDetails.state -ne 'Enabled') {
2450+
if (($sub.subDetails.subscriptionPolicies.quotaId).startswith('AAD_', 'CurrentCultureIgnoreCase')) {
2451+
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
24722452
subscriptionId = $childrenSubscription.name
24732453
subscriptionName = $childrenSubscription.properties.displayName
2474-
subscriptionQuotaId = $sub.subDetails.subscriptionPolicies.quotaId
2454+
outOfScopeReason = "QuotaId: AAD_ (State: $($sub.subDetails.state))"
2455+
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
2456+
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
2457+
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
24752458
})
24762459
}
2477-
else {
2478-
#Write-Host " preCustomDataCollection: $($childrenSubscription.properties.displayName) ($($childrenSubscription.name)) Subscription Quota Id: $($sub.subDetails.subscriptionPolicies.quotaId) is out of scope for Azure Governance Visualizer (not in Whitelist)"
2460+
if ($sub.subDetails.state -ne 'Enabled') {
24792461
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
24802462
subscriptionId = $childrenSubscription.name
24812463
subscriptionName = $childrenSubscription.properties.displayName
2482-
outOfScopeReason = "QuotaId: '$($sub.subDetails.subscriptionPolicies.quotaId)' not in Whitelist"
2464+
outOfScopeReason = "State: $($sub.subDetails.state)"
24832465
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
24842466
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
24852467
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
24862468
})
24872469
}
24882470
}
24892471
else {
2490-
$null = $script:subsToProcessInCustomDataCollection.Add([PSCustomObject]@{
2491-
subscriptionId = $childrenSubscription.name
2492-
subscriptionName = $childrenSubscription.properties.displayName
2493-
subscriptionQuotaId = $sub.subDetails.subscriptionPolicies.quotaId
2494-
})
2472+
if ($SubscriptionQuotaIdWhitelist[0] -ne 'undefined') {
2473+
$whitelistMatched = 'unknown'
2474+
foreach ($subscriptionQuotaIdWhitelistQuotaId in $SubscriptionQuotaIdWhitelist) {
2475+
if (($sub.subDetails.subscriptionPolicies.quotaId).startswith($subscriptionQuotaIdWhitelistQuotaId, 'CurrentCultureIgnoreCase')) {
2476+
$whitelistMatched = 'inWhitelist'
2477+
}
2478+
}
2479+
2480+
if ($whitelistMatched -eq 'inWhitelist') {
2481+
#write-host "$($childrenSubscription.properties.displayName) in whitelist"
2482+
$null = $script:subsToProcessInCustomDataCollection.Add([PSCustomObject]@{
2483+
subscriptionId = $childrenSubscription.name
2484+
subscriptionName = $childrenSubscription.properties.displayName
2485+
subscriptionQuotaId = $sub.subDetails.subscriptionPolicies.quotaId
2486+
})
2487+
}
2488+
else {
2489+
#Write-Host " preCustomDataCollection: $($childrenSubscription.properties.displayName) ($($childrenSubscription.name)) Subscription Quota Id: $($sub.subDetails.subscriptionPolicies.quotaId) is out of scope for Azure Governance Visualizer (not in Whitelist)"
2490+
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
2491+
subscriptionId = $childrenSubscription.name
2492+
subscriptionName = $childrenSubscription.properties.displayName
2493+
outOfScopeReason = "QuotaId: '$($sub.subDetails.subscriptionPolicies.quotaId)' not in Whitelist"
2494+
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
2495+
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
2496+
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
2497+
})
2498+
}
2499+
}
2500+
else {
2501+
$null = $script:subsToProcessInCustomDataCollection.Add([PSCustomObject]@{
2502+
subscriptionId = $childrenSubscription.name
2503+
subscriptionName = $childrenSubscription.properties.displayName
2504+
subscriptionQuotaId = $sub.subDetails.subscriptionPolicies.quotaId
2505+
})
2506+
}
24952507
}
24962508
}
24972509
}

pwsh/dev/devAzGovVizParallel.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ Param
365365
$Product = 'AzGovViz',
366366

367367
[string]
368-
$ProductVersion = '6.5.2',
368+
$ProductVersion = '6.5.3',
369369

370370
[string]
371371
$GithubRepository = 'aka.ms/AzGovViz',

pwsh/dev/functions/detailSubscriptions.ps1

Lines changed: 53 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -37,63 +37,75 @@
3737
foreach ($childrenSubscription in $childrenSubscriptions) {
3838

3939
$sub = $htAllSubscriptionsFromAPI.($childrenSubscription.name)
40-
if ($sub.subDetails.subscriptionPolicies.quotaId.startswith('AAD_', 'CurrentCultureIgnoreCase') -or $sub.subDetails.state -ne 'Enabled') {
41-
if (($sub.subDetails.subscriptionPolicies.quotaId).startswith('AAD_', 'CurrentCultureIgnoreCase')) {
42-
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
43-
subscriptionId = $childrenSubscription.name
44-
subscriptionName = $childrenSubscription.properties.displayName
45-
outOfScopeReason = "QuotaId: AAD_ (State: $($sub.subDetails.state))"
46-
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
47-
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
48-
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
49-
})
50-
}
51-
if ($sub.subDetails.state -ne 'Enabled') {
52-
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
53-
subscriptionId = $childrenSubscription.name
54-
subscriptionName = $childrenSubscription.properties.displayName
55-
outOfScopeReason = "State: $($sub.subDetails.state)"
56-
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
57-
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
58-
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
59-
})
60-
}
40+
if ($sub.subDetails.subscriptionPolicies.quotaId -eq $null) {
41+
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
42+
subscriptionId = $childrenSubscription.name
43+
subscriptionName = $childrenSubscription.properties.displayName
44+
outOfScopeReason = 'QuotaId: null'
45+
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
46+
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
47+
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
48+
})
6149
}
6250
else {
63-
if ($SubscriptionQuotaIdWhitelist[0] -ne 'undefined') {
64-
$whitelistMatched = 'unknown'
65-
foreach ($subscriptionQuotaIdWhitelistQuotaId in $SubscriptionQuotaIdWhitelist) {
66-
if (($sub.subDetails.subscriptionPolicies.quotaId).startswith($subscriptionQuotaIdWhitelistQuotaId, 'CurrentCultureIgnoreCase')) {
67-
$whitelistMatched = 'inWhitelist'
68-
}
69-
}
70-
71-
if ($whitelistMatched -eq 'inWhitelist') {
72-
#write-host "$($childrenSubscription.properties.displayName) in whitelist"
73-
$null = $script:subsToProcessInCustomDataCollection.Add([PSCustomObject]@{
51+
if ($sub.subDetails.subscriptionPolicies.quotaId.startswith('AAD_', 'CurrentCultureIgnoreCase') -or $sub.subDetails.state -ne 'Enabled') {
52+
if (($sub.subDetails.subscriptionPolicies.quotaId).startswith('AAD_', 'CurrentCultureIgnoreCase')) {
53+
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
7454
subscriptionId = $childrenSubscription.name
7555
subscriptionName = $childrenSubscription.properties.displayName
76-
subscriptionQuotaId = $sub.subDetails.subscriptionPolicies.quotaId
56+
outOfScopeReason = "QuotaId: AAD_ (State: $($sub.subDetails.state))"
57+
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
58+
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
59+
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
7760
})
7861
}
79-
else {
80-
#Write-Host " preCustomDataCollection: $($childrenSubscription.properties.displayName) ($($childrenSubscription.name)) Subscription Quota Id: $($sub.subDetails.subscriptionPolicies.quotaId) is out of scope for Azure Governance Visualizer (not in Whitelist)"
62+
if ($sub.subDetails.state -ne 'Enabled') {
8163
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
8264
subscriptionId = $childrenSubscription.name
8365
subscriptionName = $childrenSubscription.properties.displayName
84-
outOfScopeReason = "QuotaId: '$($sub.subDetails.subscriptionPolicies.quotaId)' not in Whitelist"
66+
outOfScopeReason = "State: $($sub.subDetails.state)"
8567
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
8668
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
8769
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
8870
})
8971
}
9072
}
9173
else {
92-
$null = $script:subsToProcessInCustomDataCollection.Add([PSCustomObject]@{
93-
subscriptionId = $childrenSubscription.name
94-
subscriptionName = $childrenSubscription.properties.displayName
95-
subscriptionQuotaId = $sub.subDetails.subscriptionPolicies.quotaId
96-
})
74+
if ($SubscriptionQuotaIdWhitelist[0] -ne 'undefined') {
75+
$whitelistMatched = 'unknown'
76+
foreach ($subscriptionQuotaIdWhitelistQuotaId in $SubscriptionQuotaIdWhitelist) {
77+
if (($sub.subDetails.subscriptionPolicies.quotaId).startswith($subscriptionQuotaIdWhitelistQuotaId, 'CurrentCultureIgnoreCase')) {
78+
$whitelistMatched = 'inWhitelist'
79+
}
80+
}
81+
82+
if ($whitelistMatched -eq 'inWhitelist') {
83+
#write-host "$($childrenSubscription.properties.displayName) in whitelist"
84+
$null = $script:subsToProcessInCustomDataCollection.Add([PSCustomObject]@{
85+
subscriptionId = $childrenSubscription.name
86+
subscriptionName = $childrenSubscription.properties.displayName
87+
subscriptionQuotaId = $sub.subDetails.subscriptionPolicies.quotaId
88+
})
89+
}
90+
else {
91+
#Write-Host " preCustomDataCollection: $($childrenSubscription.properties.displayName) ($($childrenSubscription.name)) Subscription Quota Id: $($sub.subDetails.subscriptionPolicies.quotaId) is out of scope for Azure Governance Visualizer (not in Whitelist)"
92+
$null = $script:outOfScopeSubscriptions.Add([PSCustomObject]@{
93+
subscriptionId = $childrenSubscription.name
94+
subscriptionName = $childrenSubscription.properties.displayName
95+
outOfScopeReason = "QuotaId: '$($sub.subDetails.subscriptionPolicies.quotaId)' not in Whitelist"
96+
ManagementGroupId = $htSubscriptionsMgPath.($childrenSubscription.name).Parent
97+
ManagementGroupName = $htSubscriptionsMgPath.($childrenSubscription.name).ParentName
98+
Level = $htSubscriptionsMgPath.($childrenSubscription.name).level
99+
})
100+
}
101+
}
102+
else {
103+
$null = $script:subsToProcessInCustomDataCollection.Add([PSCustomObject]@{
104+
subscriptionId = $childrenSubscription.name
105+
subscriptionName = $childrenSubscription.properties.displayName
106+
subscriptionQuotaId = $sub.subDetails.subscriptionPolicies.quotaId
107+
})
108+
}
97109
}
98110
}
99111
}

version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"ProductVersion": "6.5.2"
2+
"ProductVersion": "6.5.3"
33
}

0 commit comments

Comments
 (0)