Modules/Extras/ARIPolicyInv.psm1

<#
.Synopsis
Policy Module
 
.DESCRIPTION
This script process and creates the Policy sheet based on advisorresources.
 
.Link
https://github.com/microsoft/ARI/Extras/ARIPolicyInv.psm1
 
.COMPONENT
    This powershell Module is part of Azure Resource Inventory (ARI)
 
.NOTES
Version: 4.0.1
First Release Date: 15th Oct, 2024
Authors: Claudio Merola
 
#>

function Invoke-ARIPolicyProcessing {
    param($Subscriptions, $Policies)

    $obj = ''
    $tmp = @()

    foreach ($1 in $Policies)
        {
                    $data = $1.PROPERTIES
                    if($data.policyDefinitionId -like '/providers/microsoft.management/managementgroups/*')
                        {
                            $Definition = $data.policyDefinitionId.split('/')[8]
                        }
                    else
                        {
                            $Definition = $data.policyDefinitionId.split('/')[4]
                        }
                    $timecreated = [datetime]$data.metadata.createdon
                    $timecreated = $timecreated.ToString("yyyy-MM-dd HH:mm")
                    if($data.scope -like '/subscriptions/*')
                        {
                            $ScopeType = 'Subscription'
                            $Scope = ($Subscriptions | Where-Object {$_.id -eq $data.scope.split('/')[2]}).name
                        }
                    else
                        {
                            $ScopeType = 'Management Group'
                            $Scope = $data.scope.split('/')[4]
                        }

                    $obj = @{
                        'ID'                     = $1.id;
                        'Definition Id'          = $Definition;
                        'Name'                   = $data.displayName;
                        'Description'            = $data.description;
                        'Location'               = $1.location;
                        'Enforcement Mode'       = $data.enforcementmode;
                        'Created On'             = $timecreated;
                        'Assigned By'            = $data.metadata.assignedby;
                        'Scope Type'             = $ScopeType;
                        'Scope'                  = $Scope;
                        'Identity Type'          = $1.identity.type;
                        'Principal Id'           = $1.identity.principalId
                    }
                    $tmp += $obj
        }
    $tmp
}

function Build-ARIPolicyReport {
    param($File ,$Pol, $TableStyle)
    $Style = New-ExcelStyle -HorizontalAlignment Center -AutoSize -NumberFormat 0.0
    $StyleExt = New-ExcelStyle -HorizontalAlignment Left -Range B:C -Width 70 -WrapText

    $Pol |
    ForEach-Object { [PSCustomObject]$_ } |
    Select-Object 'Definition Id',
    'Name',
    'Description',
    'Location',
    'Enforcement Mode',
    'Created On',
    'Assigned By',
    'Scope Type',
    'Scope',
    'Identity Type',
    'Principal Id' |
    Export-Excel -Path $File -WorksheetName 'Policy' -AutoSize -MaxAutoSizeRows 100 -TableName 'AzurePolicy' -MoveToStart -TableStyle $tableStyle -Style $Style,$StyleExt -KillExcel
}