Functions/Azure/Confirm-AzRoleAssignment.ps1
function Confirm-AzRoleAssignment { <# .SYNOPSIS Tests for the existence of an Azure Role Assignment and (optionally) its specific configuration in Azure. .DESCRIPTION The Confirm-AzRoleAssignment function takes several parameters and returns $true if it is found and matches the specified configuration, otherwise it returns $false. .PARAMETER RoleAssignmentName The name of the Role Assignment to look for. This parameter is required. .PARAMETER ResourceGroupName The name of the Resource Group that the Role Assignment is supposed to be in. This parameter is required. .PARAMETER PrincipalDisplayName The Display Name for the principal (user, group, or service principal) assigned to the role. This parameter is required. .PARAMETER RoleDefinitionName The name of the role definition (e.g., "Contributor", "Reader"). This parameter is optional. .PARAMETER Scope The scope of the role assignment (e.g., subscription, resource group, or resource). This parameter is optional. .EXAMPLE # Check if a role assignment named "MyRoleAssignment01" exists in the resource group "MyResourceGroup01" Confirm-AzRoleAssignment -RoleAssignmentName "MyRoleAssignment01" -ResourceGroupName "MyResourceGroup01" ` -PrincipalDisplayName "MyUser01" .EXAMPLE # Check if a role assignment named "MyRoleAssignment01" exists in the resource group "MyResourceGroup01" and store # the result in a variable. $exists = Confirm-AzRoleAssignment -RoleAssignmentName "MyRoleAssignment01" -ResourceGroupName "MyResourceGroup01" ` -PrincipalDisplayName "MyUser01 if ($exists) { Write-Output "MyRoleAssignment01 exists in the MyResourceGroup01 Resource Group." } else { Write-Output "MyRoleAssignment01 does not exist in the MyResourceGroup01 Resource Group." } .EXAMPLE # Check with a specific role definition Confirm-AzRoleAssignment -RoleAssignmentName "MyRoleAssignment01" -ResourceGroupName "MyResourceGroup01" ` -PrincipalDisplayName "MyUser01" -RoleDefinitionName "Contributor" .EXAMPLE # Check with a specific scope Confirm-AzRoleAssignment -RoleAssignmentName "MyRoleAssignment01" -ResourceGroupName "MyResourceGroup01" ` -PrincipalDisplayName "MyUser01" -Scope "/subscriptions/00000000-0000-0000-0000-000000000000" .EXAMPLE # How to use this in a Pester test Describe "MyRoleAssignment01 Role Assignment" { It "Should exist in the MyResourceGroup01 Resource Group" { Confirm-AzRoleAssignment -RoleAssignmentName "MyRoleAssignment01" -ResourceGroupName "MyResourceGroup01" ` -PrincipalDisplayName "MyUser01" | Should -Be $true } } .NOTES Author: Doug Seelinger #> [CmdletBinding()] param ( [Parameter(Mandatory = $true)] [string]$RoleAssignmentName, [Parameter(Mandatory = $true)] [string]$ResourceGroupName, [Parameter(Mandatory = $true)] [string]$PrincipalDisplayName, [Parameter(Mandatory = $false)] [string]$RoleDefinitionName, [Parameter(Mandatory = $false)] [string]$Scope ) begin { Import-Module Az.Accounts Import-Module Az.Resources if (-not (Get-AzContext)) { Connect-AzAccount } } process { # Get the role assignments in the specified resource group $roleAssignments = Get-AzRoleAssignment -ResourceGroupName $ResourceGroupName # Filter the role assignments based on the provided parameters $filteredAssignments = $roleAssignments | Where-Object { $_.RoleAssignmentName -eq $RoleAssignmentName -and $_.DisplayName -eq $PrincipalDisplayName -and ([string]::IsNullOrEmpty($RoleDefinitionName) -or $_.RoleDefinitionName -eq $RoleDefinitionName) -and ([string]::IsNullOrEmpty($Scope) -or $_.Scope -eq $Scope) } # Return $true if the role assignment is found, otherwise return $false return $filteredAssignments.Count -gt 0 } end { } } |