MimSyncJoinRule - microsoft/MIMDSC GitHub Wiki

This resource is for MIM Sync join and projection rules.

The DSC resource configuration below validates the MIM Sync configuration by inspecting the XML below. TODO - include screen shots of the MIM Sync UI

DSC Configuration

This is a sample DSC configuration including just the Import Attribute Flow Rule resource type.

Configuration TestMimSyncJoinRule 
{ 
            Import-DscResource -ModuleName MimSyncDsc

            Node (hostname) 
            { 
                JoinRule TestMimSyncJoinRule
                {
                   ManagementAgentName    = 'TinyHR'
                   CDObjectType           = 'contact'                   
                   Ensure                 = 'Present'
                   JoinCriterion          = @(
                      JoinCriterion{
                          ID                      = [Guid]::NewGuid().Guid
                          MVObjectType            = 'Contact'
                          ResolutionType          = 'none'
                          ResolutionScriptContext = ''
                          Order                   = 0
                          AttributeMapping        = @(
                             AttributeMapping{
                                MappingType   = 'direct-mapping'
                                MVAttribute   = 'FirstName'
                                CDAttribute   = 'FirstName'
                                ScriptContext = ''
                             }
                             AttributeMapping{
                                MappingType   = 'direct-mapping'
                                MVAttribute   = 'LastName'
                                CDAttribute   = 'LastName'
                                ScriptContext = ''
                             }                             
                          )
                      }
                      JoinCriterion{
                          ID                      = [Guid]::NewGuid().Guid
                          MVObjectType            = 'Contact'
                          ResolutionType          = 'scripted'
                          ResolutionScriptContext = 'cd.contact#2'
                          Order                   = 1
                          AttributeMapping        = @(
                             AttributeMapping{
                                MappingType   = 'scripted-mapping'
                                MVAttribute   = 'Alias'
                                CDAttribute   = 'FirstName','LastName'
                                ScriptContext = 'cd.contact#2:FirstName,LastName->Alias'
                             }                       
                          )
                      }
                      JoinCriterion{
                          ID                      = [Guid]::NewGuid().Guid
                          MVObjectType            = ''
                          ResolutionType          = 'none'
                          ResolutionScriptContext = ''
                          Order                   = 2
                          AttributeMapping        = @(
                             AttributeMapping{
                                MappingType   = 'direct-mapping'
                                MVAttribute   = 'Alias'
                                CDAttribute   = 'UserID'
                                ScriptContext = ''
                             }                       
                          )
                      }
                   )
                }
            }
        } 

MIM Sync XML

This is the XML exported from the Sync Service, which is what the DSC resource validates.

<ma-data>
    <join>
        <join-profile cd-object-type="contact">
            <join-criterion id="{94012C24-7B5F-4AAA-BF49-A8A92AC0D568}">
                <search mv-object-type="Contact">
                    <attribute-mapping mv-attribute="FirstName">
                        <direct-mapping>
                            <src-attribute>FirstName</src-attribute>
                        </direct-mapping>
                    </attribute-mapping>
                    <attribute-mapping mv-attribute="LastName">
                        <direct-mapping>
                            <src-attribute>LastName</src-attribute>
                        </direct-mapping>
                    </attribute-mapping>
                </search>
                <resolution type="none">
                    <script-context></script-context>
                </resolution>
            </join-criterion>
            <join-criterion id="{357AA84E-B9CD-487F-8EC7-E4C6DC931E43}">
                <search mv-object-type="Contact">
                    <attribute-mapping mv-attribute="Alias">
                        <scripted-mapping>
                            <script-context>cd.contact#2:FirstName,LastName-&gt;Alias</script-context>
                            <src-attribute>FirstName</src-attribute>
                            <src-attribute>LastName</src-attribute>
                        </scripted-mapping>
                    </attribute-mapping>
                </search>
                <resolution type="scripted">
                    <script-context>cd.contact#2</script-context>
                </resolution>
            </join-criterion>
            <join-criterion id="{B92AD32F-7F84-49A7-A385-63FB17FC3EAE}">
                <search>
                    <attribute-mapping mv-attribute="Alias">
                        <direct-mapping>
                            <src-attribute>UserID</src-attribute>
                        </direct-mapping>
                    </attribute-mapping>
                </search>
                <resolution type="none">
                    <script-context></script-context>
                </resolution>
            </join-criterion>
        </join-profile>
    </join>
</ma-data>

DSC Verbose Output

This is sample log output showing what DSC does with the resource to validate the configuration.

VERBOSE: [CMARTBOOK]: LCM:  [ Start  Set      ]
VERBOSE: [CMARTBOOK]: LCM:  [ Start  Resource ]  [[JoinRule]TestMimSyncJoinRule]
VERBOSE: [CMARTBOOK]: LCM:  [ Start  Test     ]  [[JoinRule]TestMimSyncJoinRule]
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule] Using CacheLocation: C:\ProgramData\MimSyncDsc\Svrexport
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule] Using CacheAge:      1440 (in minutes)
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule] Cache still valid, leave it
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule] Getting sync configuration files from 'C:\ProgramData\MimSyncDsc\Svrexport'
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule] Finding join rule with a CD object type of 'contact' on management agent 'TinyHR'...
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule] Join Rule found, diffing the properties: C:\ProgramData\MimSyncDsc\Svrexport\MA-TinyHR.XML
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]   Skipping system-owned attribute: CDObjectType
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]   Skipping system-owned attribute: ManagementAgentName
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]   Skipping system-owned attribute: DependsOn
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]   Skipping system-owned attribute: Ensure
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]   Comparing property JoinCriterion using XPath: join-criterion
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]     From DSC: 3
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]     From FIM: 3
WARNING: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]   'JoinCriterion' property is not the same.
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]     From DSC: 
MVObjectType ResolutionType ResolutionScriptContext Order SideIndicator
------------ -------------- ----------------------- ----- -------------
Contacts     none                                       2 <=           
             none                                       0 <=
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]     From FIM: 
MVObjectType ResolutionType ResolutionScriptContext Order SideIndicator
------------ -------------- ----------------------- ----- -------------
Contact      none                                       0 =>           
             none                                       2 =>
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule]   Skipping system-owned attribute: PsDscRunAsCredential
VERBOSE: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule] Returning: False
VERBOSE: [CMARTBOOK]: LCM:  [ End    Test     ]  [[JoinRule]TestMimSyncJoinRule]  in 3.9640 seconds.
VERBOSE: [CMARTBOOK]: LCM:  [ Start  Set      ]  [[JoinRule]TestMimSyncJoinRule]
WARNING: [CMARTBOOK]:                            [[JoinRule]TestMimSyncJoinRule] DSC resources for the MIM Synchronization Service are not able to update the MIM Synchronization configuration.
VERBOSE: [CMARTBOOK]: LCM:  [ End    Set      ]  [[JoinRule]TestMimSyncJoinRule]  in 0.0100 seconds.
VERBOSE: [CMARTBOOK]: LCM:  [ End    Resource ]  [[JoinRule]TestMimSyncJoinRule]
VERBOSE: [CMARTBOOK]: LCM:  [ End    Set      ]
VERBOSE: [CMARTBOOK]: LCM:  [ End    Set      ]    in  4.4880 seconds.
⚠️ **GitHub.com Fallback** ⚠️