Public/Role.ps1

Class Role {
    [String]$ResourceId
    [String]$DisplayName
    [String]$RoleDefinitionId
    [System.Object]$UserMemberSettings
    
    Role(){}

    Role(
        [String]$ResourceId,
        [String]$RoleDefinitionId
    ){
        $this.ResourceId = $ResourceId
        $this.RoleDefinitionId = $RoleDefinitionId
        $this.DisplayName = ""
        $this.GetPrivilegedRoleDefinition()
        $this.GetPrivilegedRolePrivilegedRoleSetting()
        Write-Debug "[ResourceId] $($this.ResourceId)"
        Write-Debug "[DisplayName] $($this.DisplayName)"
        Write-Debug "[RoleDefinitionId] $($this.RoleDefinitionId)"
        #Write-Debug "[UserMemberSettings] $($this.UserMemberSettings)"
    }


    <#
    RunspaceId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    Id : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    ResourceId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    ExternalId : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    DisplayName : Global Readers
    SubjectCount :
    EligibleAssignmentCount :
    ActiveAssignmentCount :
    #>

    [void] GetPrivilegedRoleDefinition(){
        try {
            $RoleDefinition = Get-AzureADMSPrivilegedRoleDefinition -ProviderId aadRoles `
            -ResourceId $this.ResourceId `
            -Filter "Id eq '$($this.RoleDefinitionId)'"
    
            $this.DisplayName = $RoleDefinition."DisplayName"
        }
        catch {
            throw 
        }
    }

    <#
     
    RuleIdentifier Setting
    -------------- -------
    ExpirationRule {"permanentAssignment":true,"maximumGrantPeriodInMinutes":120}
    MfaRule {"mfaRequired":true}
    JustificationRule {"required":true}
    ApprovalRule {"Approvers":[]}
    TicketingRule {"ticketingRequired":false}
    AcrsRule {"acrsRequired":false,"acrs":""}
    #>

    [void] GetPrivilegedRolePrivilegedRoleSetting(){
        try {
            $RoleSetting = Get-AzureADMSPrivilegedRoleSetting -ProviderId aadRoles `
            -Filter "ResourceId eq '$($this.ResourceId)' and RoleDefinitionId eq '$($this.RoleDefinitionId)'"
            $this.UserMemberSettings = $RoleSetting.UserMemberSettings
        }
        catch {
            throw
        }
    }

    [void]OpenPrivilegedRoleAssignmentRequest($ObjectId, $Schedule, $Reason){
        Write-Verbose "Open Privileged Role Assignment Request for"
        Write-Debug "$ObjectId"
        Write-Debug "$Schedule"
        Write-Debug "$Reason"
        try{
            $OpenPrivilegedAssignmentRequest = Open-AzureADMSPrivilegedRoleAssignmentRequest `
             -ProviderId 'aadRoles' `
             -ResourceId $this.ResourceId `
             -RoleDefinitionId $this.RoleDefinitionId `
             -SubjectId $ObjectId `
             -Type 'UserAdd' `
             -AssignmentState 'Active' `
             -schedule $Schedule `
             -reason $Reason
             Write-Debug $OpenPrivilegedAssignmentRequest
             Write-Output "Aktiverte $($this.DisplayName)"
         }catch{
              throw "$_" 
         }
         
    }
    [string]GetMaximumGrantPeriodInMinutes(){
        return (($this.UserMemberSettings | Where-Object{$_.'RuleIdentifier' -eq 'ExpirationRule'}).Setting | ConvertFrom-Json).maximumGrantPeriodInMinutes
    }
}