Introduction
Last year Microsoft released the Microsoft Identity Manager Configuration Documenter which is available here. It is a fantastic little tool from Microsoft that supersedes its predecessor from the Microsoft Identity Manager 2003 Resource Toolkit (which only documented the Sync Server Configuration).
Running the tool (a PowerShell Module) against a base out-of-the-box reference configuration for FIM/MIM Servers reconciled against an exported configuration from the MIM Sync and Service Servers from an implementation, generates an HTML Report document that details the existing configuration of the MIM Service and MIM Sync.
Overview
Last year I wrote this post based on an automated solution I implemented to perform nightly backups of a FIM/MIM environment during development.
This post details how I’ve automated another daily task for a large development environment where a number of changes are going on and I wanted to have Identity Manager configuration documentation automatically generated daily. Partly to quickly be able to work out what has changed when needing to roll back/re-validate changes, and also to have the individual configs from each day so they could also be used if we need to rollback.
The process uses an Azure Function App that uses Remote PowerShell into MIM to;
- Leverage a modified (stream lined version) of my nightly backup Azure Function to generate the Schema.xml and Policy.xml MIM Service configuration files and the Lithnet MIIS Automation PowerShell Module installed on the MIM Sync Server to export of the MIM Sync Server Configuration
- Create a sub-directory for each day under the MIM Documenter Tool to hold the daily configs
- Execute the generation of the Report and have the Report copied to the daily config/documented solution
Obtaining and configuring the MIM Configuration Documenter
Download the MIM Configuration Documenter from here and extract it to somewhere like c:\FIMDoco on your FIM/MIM Sync Server. In this example in my Dev environment I have the MIM Sync and Service/Portal all on a single server.
Then update the Invoke-Documenter-Contoso.ps1 (or whatever you’ve renamed the script to) to make the following changes;
- Update the following lines for your version and include the new variable $schedulePath and add it to the $pilotConfig variable. Create the C:\FIMDoco\Customer and C:\FIMDoco\Customer\Dev directories (replace Customer with something appropriate.
######## Edit as appropriate #################################### $schedulePath = Get-Date -format dd-MM-yyyy $pilotConfig = "Customer\Dev\$($schedulePath)" # the path of the Pilot / Target config export files relative to the MIM Configuration Documenter "Data" folder. $productionConfig = "MIM-SP1-Base_4.4.1302.0" # the path of the Production / Baseline config export files relative to the MIM Configuration Documenter "Data" folder. $reportType = "SyncAndService" # "SyncOnly" # "ServiceOnly" #################################################################
- Remark out the Host Settings as these won’t work via a WebJob/Azure Function
#$hostSettings = (Get-Host).PrivateData #$hostSettings.WarningBackgroundColor = "red" #$hostSettings.WarningForegroundColor = "white"
- Remark out the last line as this will be executed as part of the automation and we want it to complete silently at the end.
# Read-Host "Press any key to exit"
It should then look something like this;
Azure Function to Automate execution of the Documenter
As per my nightly backup process;
- I configured my MIM Sync Server to accept Remote PowerShell Sessions. That involved enabling WinRM, creating a certificate, creating the listener, opening the firewall port and enabling the incoming port on the NSG . You can easily do all that by following my instructions here. From the same post I setup up the encrypted password file and uploaded it to my Function App and set the Function App Application Settings for MIMSyncCredUser and MIMSyncCredPassword.
- I created an Azure PowerShell Timer Function App. Pretty much the same as I show in this post, except choose Timer.
- I configured my Schedule for 6am every morning using the following CRON configuration
0 0 6 * * *
- I also needed to increase the timeout for the Azure Function as generation of the files to execute the report and the time to execute the report exceed the default timeout of 5 mins in my environment (19 Management Agents). I increased the timeout to the maximum of 10 mins as detailed here. Essentially added the following to the host.json file in the wwwroot directory of my Function App.
{ "functionTimeout": "00:10:00" }
Azure Function PowerShell Timer Script (Run.ps1)
This is the Function App PowerShell Script that uses Remote PowerShell into the MIM Sync/Service Server to export the configuration using the Lithnet MIIS Automation and Microsoft FIM Automation PowerShell modules.
Note: If your MIM Service is on a different host you will need to install the Microsoft FIM Automation PowerShell Module on your MIM Sync Server and update the script below to change references to http://localhost:5725 to whatever your MIM Service host is.
Testing the Function App
With everything configured, manually running the Function App and checking the output window if you’ve configured everything correct will show success in the Logs as shown below. In this environment with 19 Management Agents it takes 7 minutes to run.
Identity Manager Configuration Documentation Report
The outcome everyday just after 6am is I have (via automation) an Identity Manager Configuration Documentation Report that contains;
- an Export of the Policy and Schema Configuration from my MIM Service
- an Export of the MIM Sync Server Configuration (the Metaverse and all Management Agents)
- I have the MIM Configuration Documenter Report generated
- If I need to rollback changes I have the ability to do that on a daily interval (either for a MIM Service change or an individual Management Agent change
Under the c:\FIMDoco\Data\Customer\Dev\\Report directory is the HTML Configuration Report.
Opening the report in a browser we have the configuration of the MIM Sync and MIM Service.