Public/Compliance/Get-RetentionLinks.ps1


function Get-RetentionLinks {

    [CmdletBinding()]
    Param
    (

    )
    Begin {

    }
    Process {
        $resultArray = @()
        $findParameter = "RetentionPolicyTagLinks"
        $retPols = Get-RetentionPolicy | Select name, identity, IsDefault, RetentionPolicyTagLinks
        $retTags = Get-RetentionPolicyTag
        $retPolProps = $retPols | Get-Member -MemberType 'NoteProperty' | Select Name
        
        $tagHash = @{}
        foreach ($tag in $retTags) {
            foreach ($id in $tag.name) {
                $tagHash[$id] = $tag 
            }
        }
      
        foreach ($row in $retPols) {           
            ForEach ($link in $row.$findParameter) {
                $polHash = @{}
                $polHash['TagName'] = ($tagHash[$link]).name
                $polHash['TagType'] = ($tagHash[$link]).type
                $polHash['TagEnabled'] = ($tagHash[$link]).RetentionEnabled
                $polHash['TagAgeLimit'] = ($tagHash[$link]).AgeLimitForRetention  
                $polHash['TagAction'] = ($tagHash[$link]).RetentionAction
                $polHash['TagComment'] = ($tagHash[$link]).Comment                                             
                foreach ($field in $retPolProps.name) {
                    $polHash[$field] = ($row.$field) -join ","
                }  
                $resultArray += [psCustomObject]$polHash        
            }
        }
        $links = @()
        foreach ($nPolicy in $RetPols) {
            foreach ($nId in $nPolicy.RetentionPolicyTagLinks) {
                $links += $nId 
            }
        }
        foreach ($nTag in $retTags) {
            if ($links -notcontains $nTag.name) {
                $polHash = @{}
                $polHash['TagName'] = $nTag.name
                $polHash['TagType'] = $nTag.type
                $polHash['TagEnabled'] = $nTag.RetentionEnabled
                $polHash['TagAgeLimit'] = $nTag.AgeLimitForRetention  
                $polHash['TagAction'] = $nTag.RetentionAction
                $polHash['TagComment'] = $nTag.Comment 
                foreach ($field in $retPolProps.name) {
                    $polHash[$field] = "Tag_Not_Linked" -join ","
                }  
                $resultArray += [psCustomObject]$polHash  
            }
           
        }
    }
    End {
            $resultArray | Select "IsDefault", "Name", "TagName", "TagAgeLimit", "TagAction", "TagType", "TagEnabled", "TagComment", "RetentionPolicyTagLinks", "Identity" | Sort Name
    }
}