Public/Get-ADFSTkToolsIssuanceTransformRules.ps1

function Get-ADFSTkToolsIssuanceTransformRules {
param (
    [Parameter(Mandatory=$true,
               Position=0)]
    $entityId,
    [switch]$SelectAttributes
)

    if ([string]::IsNullOrEmpty($Global:ADFSTkPaths))
    {
        $Global:ADFSTkPaths = Get-ADFSTKPaths
    }

    $configFiles = Get-ADFSTkConfiguration -ConfigFilesOnly

    if ([string]::IsNullOrEmpty($configFiles))
    {
        Write-ADFSTkHost confNoInstConfFiles -Style Attention
    }
    elseif ($configFiles -is [System.Object])
    {
        $configFile = $configFiles
    }
    else
    {
        $configFile = $configFiles | Out-GridView -Title (Get-ADFSTkLanguageText confSelectInstConfFileToHandle) -OutputMode Single
    }

    [xml]$settings = Get-Content $configFile.ConfigFile
    
    
    if ($PSBoundParameters.ContainsKey('SelectAttributes') -and $SelectAttributes -ne $false)
    {
        $AllAttributes = Import-ADFSTkAllAttributes
        $AllTransformRules = Import-ADFSTkAllTransformRules

        $Attributes = $AllTransformRules.Keys | `
                      Select @{Label = "Attribute";Expression={$_}},
                              @{Label = "Example";Expression={
                                  if ($AllTransformRules.$_.AttributeGroup -eq 'Static attributes')
                                      {
                                          $Settings.configuration.staticValues.$_
                                      }
                                  }
                              } | Sort Attribute | `
                                  Out-GridView -Title "Select one or more attributes to build rules from" -OutputMode Multiple | `
                                  Select -ExpandProperty Attribute

        $Attributes | % {
            $TransformRules = [Ordered]@{}
        }{
            if ($AllTransformRules.ContainsKey($_)){
                $TransformRules.$_ = $AllTransformRules.$_
            }
        }

        $IssuanceTransformRulesManualSP = @{}
        $IssuanceTransformRulesManualSP[$EntityId] = $TransformRules
        
        $AttributesFromStore = @{}
        $IssuanceTransformRules = [Ordered]@{}
        
        if ($EntityId -ne $null -and $IssuanceTransformRulesManualSP.ContainsKey($EntityId))
        {
            foreach ($Rule in $IssuanceTransformRulesManualSP[$EntityId].Keys) { 
                if ($IssuanceTransformRulesManualSP[$EntityId][$Rule] -ne $null)
                {                
                    $IssuanceTransformRules[$Rule] = $IssuanceTransformRulesManualSP[$EntityId][$Rule].Rule.Replace("[ReplaceWithSPNameQualifier]",$EntityId)
                    foreach ($Attribute in $IssuanceTransformRulesManualSP[$EntityId][$Rule].Attribute) { 
                        $AttributesFromStore[$Attribute] = $AllAttributes[$Attribute] 
                    }
                }
            }
        }

        if ($AttributesFromStore.Count)
        {
            $FirstRule = Get-ADFSTkStoreRule -Stores $Settings.configuration.storeConfig.stores.store `
                                             -AttributesFromStore $AttributesFromStore `
                                             -EntityId $EntityId 

            return  $FirstRule + $IssuanceTransformRules.Values
        }
        else
        {
            return $IssuanceTransformRules.Values
        }
    }
    else
    {
        $MetadataCacheFile = (Join-Path $Global:ADFSTkPaths.cacheDir $settings.configuration.MetadataCacheFile)
        $metadataURL = $settings.configuration.metadataURL

        if ([string]::IsNullOrEmpty($Global:ADFSTkToolMetadata))
        {
            $Global:ADFSTkToolMetadata = @{
                $MetadataCacheFile = Get-ADFSTkMetadata -CacheTime 60 -CachedMetadataFile $MetadataCacheFile -metadataURL $metadataURL
            }
        }
        elseif(!$Global:ADFSTkToolMetadata.ContainsKey($MetadataCacheFile))
        {
            $Global:ADFSTkToolMetadata = @{
                $MetadataCacheFile = Get-ADFSTkMetadata -CacheTime 60 -CachedMetadataFile $MetadataCacheFile -metadataURL $metadataURL
            }
        }

        $sp = ($Global:ADFSTkToolMetadata.$MetadataCacheFile).EntitiesDescriptor.EntityDescriptor | ? {$_.entityId -eq $entityId}

        $EntityCategories = @()
            $EntityCategories += $sp.Extensions.EntityAttributes.Attribute | ? Name -eq "http://macedir.org/entity-category" | select -ExpandProperty AttributeValue | % {
                if ($_ -is [string])
                {
                    $_
                }
                elseif ($_ -is [System.Xml.XmlElement])
                {
                    $_."#text"
                }
            }
    
        Get-ADFSTkIssuanceTransformRules $EntityCategories -EntityId $entityID `
                                                           -RequestedAttribute $sp.SPSSODescriptor.AttributeConsumingService.RequestedAttribute `
                                                           -RegistrationAuthority $sp.Extensions.RegistrationInfo.registrationAuthority `
                                                           -NameIdFormat $sp.SPSSODescriptor.NameIDFormat
    }
}