Reference version:
FIM PowerShell Modules v2.1
http://fimpowershellmodule.codeplex.com/releases/view/98374
Get-ExportAttributeFlow
<#.SYNOPSISGets the Export Attribute Flow Rules from Sync Server Configuration.DESCRIPTIONReads the server configuration from the XML files, and outputs theExport Attribute Flow rules as PSObjects.OUTPUTSPSObjects containing the synchronization server export attribute flowrules.EXAMPLEGet-ExportAttributeFlow -ServerConfigurationFolder"E:\sd\IAM\ITAuthorize\Source\Configuration\FimSync\ServerConfiguration"#>Function Get-ExportAttributeFlow{Param([parameter(Mandatory=$false)][String][ValidateScript({Test-Path $_})]$ServerConfigurationFolder)End{### This is where the rules will beaggregated before we output them$rules = @()### Export attribute flow rules arecontained in the ma-data nodes of the MA*.XML files$maFiles = @(get-item (Join-Path $ServerConfigurationFolder "MA-*.xml"))foreach ($maFile in $maFiles){### Get the MA Name and MA ID$maName = (select-xml $maFile -XPath "//ma-data/name").Node.InnerTextforeach($exportFlowSet in (Select-Xml -path $maFile -XPath "//export-flow-set" | select -ExpandProperty Node)){$mvObjectType = $exportFlowSet.'mv-object-type'$cdObjectType = $exportFlowSet.'cd-object-type'foreach($exportFlow in $exportFlowSet.'export-flow'){$cdAttribute = $exportFlow.'cd-attribute'[bool]$allowNulls = $falseif ([bool]::TryParse($exportFlow.'suppress-deletions', [ref]$allowNulls)){$allowNulls = -not $allowNulls}if ($exportFlow.'direct-mapping' -ne $null){###### Handlesrc-attribute that are intrinsic (object-id )###if ($exportFlow.'direct-mapping'.'src-attribute'.intrinsic){$srcAttribute = "<{0}>" -F $exportFlow.'direct-mapping'.'src-attribute'.'#text'}else{$srcAttribute = $exportFlow.'direct-mapping'.'src-attribute'}$rule = New-Object PSObject$rule | Add-Member -MemberType noteproperty -name 'RuleType' -value 'DIRECT'$rule | Add-Member -MemberType noteproperty -name 'MAName' -value $maName$rule | Add-Member -MemberType noteproperty -name 'MVObjectType' -value $mvObjectType$rule | Add-Member -MemberType noteproperty -name 'MVAttribute' -value $srcAttribute$rule | Add-Member -MemberType noteproperty -name 'CDObjectType' -value $cdObjectType$rule | Add-Member -MemberType noteproperty -name 'CDAttribute' -value $cdAttribute$rule | Add-Member -MemberType noteproperty -name 'ScriptContext' -value $null$rule | Add-Member -MemberType noteproperty -name 'AllowNulls' -value $allowNulls$rules += $rule}elseif ($exportFlow.'scripted-mapping' -ne $null){$scriptContext = $exportFlow.'scripted-mapping'.'script-context'$srcAttributes = @()###### Handlesrc-attribute that are intrinsic (object-id )###$exportFlow.'scripted-mapping'.'src-attribute' | ForEach-Object {if ($_.intrinsic){$srcAttributes += "<{0}>" -F $_.'#text'}elseif ($_) # Do not addempty values.{$srcAttributes += $_}}# (Commented)Leave as collection.#if($srcAttributes.Count -eq 1)#{# $srcAttributes = $srcAttributes -as[String]#}$rule = New-Object PSObject$rule | Add-Member -MemberType noteproperty -name 'RuleType' -value 'SCRIPTED'$rule | Add-Member -MemberType noteproperty -name 'MAName' -value $maName$rule | Add-Member -MemberType noteproperty -name 'MVObjectType' -value $mvObjectType$rule | Add-Member -MemberType noteproperty -name 'MVAttribute' -value $srcAttributes$rule | Add-Member -MemberType noteproperty -name 'CDObjectType' -value $cdObjectType$rule | Add-Member -MemberType noteproperty -name 'CDAttribute' -value $cdAttribute$rule | Add-Member -MemberType noteproperty -name 'ScriptContext' -value $scriptContext$rule | Add-Member -MemberType noteproperty -name 'AllowNulls' -value $allowNulls$rules += $rule}elseif ($exportFlow.'sync-rule-mapping' -ne $null){$srcAttribute = $exportFlow.'sync-rule-mapping'.'src-attribute'if($exportFlow.'sync-rule-mapping'.'mapping-type' -eq 'direct'){$rule = New-Object PSObject$rule | Add-Member -MemberType noteproperty -name 'RuleType' -value 'OSR-Direct'$rule | Add-Member -MemberType noteproperty -name 'MAName' -value $maName$rule | Add-Member -MemberType noteproperty -name 'MVObjectType' -value $mvObjectType$rule | Add-Member -MemberType noteproperty -name 'MVAttribute' -value $srcAttribute$rule | Add-Member -MemberType noteproperty -name 'CDObjectType' -value $cdObjectType$rule | Add-Member -MemberType noteproperty -name 'CDAttribute' -value $cdAttribute$rule | Add-Member -MemberType noteproperty -name 'ScriptContext' -value $null$rule | Add-Member -MemberType noteproperty -name 'AllowNulls' -value $allowNulls$rules += $rule}elseif ($exportFlow.'sync-rule-mapping'.'mapping-type' -eq 'expression'){$scriptContext = $exportFlow.'sync-rule-mapping'.'sync-rule-value'.'export-flow'.InnerXml$srcAttribute = $exportFlow.'sync-rule-mapping'.'sync-rule-value'.'export-flow'.dest$rule = New-Object PSObject$rule | Add-Member -MemberType noteproperty -name 'RuleType' -value 'OSR-Expression'$rule | Add-Member -MemberType noteproperty -name 'MAName' -value $maName$rule | Add-Member -MemberType noteproperty -name 'MVObjectType' -value $mvObjectType$rule | Add-Member -MemberType noteproperty -name 'MVAttribute' -value $srcAttribute$rule | Add-Member -MemberType noteproperty -name 'CDObjectType' -value $cdObjectType$rule | Add-Member -MemberType noteproperty -name 'CDAttribute' -value $cdAttribute$rule | Add-Member -MemberType noteproperty -name 'ScriptContext' -value $scriptContext$rule | Add-Member -MemberType noteproperty -name 'AllowNulls' -value $allowNulls$rules += $rule}elseif ($exportFlow.'sync-rule-mapping'.'mapping-type' -eq 'constant'){$srcAttributes = @()$scriptContext = $exportFlow.'sync-rule-mapping'.'sync-rule-value'$rule = New-Object PSObject$rule | Add-Member -MemberType noteproperty -name 'RuleType' -value 'OSR-Constant'$rule | Add-Member -MemberType noteproperty -name 'MAName' -value $maName$rule | Add-Member -MemberType noteproperty -name 'MVObjectType' -value $mvObjectType$rule | Add-Member -MemberType noteproperty -name 'MVAttribute' -value $srcAttributes$rule | Add-Member -MemberType noteproperty -name 'CDObjectType' -value $cdObjectType$rule | Add-Member -MemberType noteproperty -name 'CDAttribute' -value $cdAttribute$rule | Add-Member -MemberType noteproperty -name 'ScriptContext' -value "'$scriptContext'"$rule | Add-Member -MemberType noteproperty -name 'AllowNulls' -value $allowNulls$rules += $rule}else{throw "UnsupportedExport Flow type '$($exportFlow.'sync-rule-mapping'.'mapping-type')'"}}}}}Write-Output $rules}#End}