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
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 = ''
}
)
}
)
}
}
}
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->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>
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.