-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCopy-RbacFrameworkRoleDefinitions.ps1
More file actions
57 lines (51 loc) · 1.97 KB
/
Copy pathCopy-RbacFrameworkRoleDefinitions.ps1
File metadata and controls
57 lines (51 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Param(
[Parameter(Mandatory=$True)]
[string]$SourceSubscriptionId,
[Parameter(Mandatory=$True)]
[string]$TargetSubscriptionId,
[Parameter(Mandatory=$False)]
[switch]$WhatIf = $False
)
$errors = $False
$subList = Get-AzContext -ListAvailable -ErrorAction SilentlyContinue
if ( $null -eq $subList ) {
Write-Error "Please Connect to Azure Powershell (Connect-AzAccount) before running this script."
exit
}
elseif ( $SourceSubscriptionId -notin $subList.Subscription.Id ) {
Write-Error "Subscription $SourceSubscriptionId not found."
exit
}
elseif ( $TargetSubscriptionId -notin $subList.Subscription.Id ) {
Write-Error "Subscription $TargetSubscriptionId not found."
exit
}
$missingCustomRoles = Get-AzRoleDefinition `
-Scope "/subscriptions/$($SourceSubscriptionId)" `
-Custom `
-ErrorAction SilentlyContinue `
| Where-Object { $_.AssignableScopes -contains "/subscriptions/$($SourceSubscriptionId)" }
| Where-Object { $_.AssignableScopes -notcontains "/subscriptions/$($TargetSubscriptionId)" }
foreach ( $role in $missingCustomRoles ) {
if ( -not $WhatIf ) {
$role.AssignableScopes += "/subscriptions/$($TargetSubscriptionId)"
try {
$role | Set-AzRoleDefinition -ErrorAction Stop
Write-Host "Copied Custom Role $($role.Name) to Subscription $TargetSubscriptionId"
} catch {
Write-Error "Failed to Copy Custom Role $($role.Name) to Subscription $TargetSubscriptionId"
$errors = $true
}
} else {
Write-Host "Missing Custom Role $($role.Name) in Subscription $TargetSubscriptionId" -ForegroundColor Yellow
}
}
if ( $missingCustomRoles.Count -eq 0 ) {
Write-Host "No Custom Roles to Copy to Subscription $TargetSubscriptionId" -ForegroundColor Green
} elseif ( -not $WhatIf ) {
if ( $errors ) {
Write-Host "Complete with Errors!" -ForegroundColor Yellow
} else {
Write-Host "Complete!" -ForegroundColor Green
}
}