<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>missmiis</title>
	
	<link>http://www.wapshere.com/missmiis</link>
	<description>Adventures in identity management</description>
	<lastBuildDate>Wed, 16 May 2012 08:22:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/missmiis" /><feedburner:info uri="missmiis" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>A Script to make FIM Policy “Self-Documenting”</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/uzfo-jxfB-s/a-script-to-make-fim-policy-self-documenting</link>
		<comments>http://www.wapshere.com/missmiis/a-script-to-make-fim-policy-self-documenting#comments</comments>
		<pubDate>Wed, 16 May 2012 08:22:03 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[MPR]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[Sets]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=2017</guid>
		<description><![CDATA[There&#8217;s an ongoing problem with maintaining a system that has all the configuration possibilities of FIM. Documentation is usually out of date the moment it&#8217;s written and it&#8217;s a cumbersome way to try and understand a system anyway. One thing that can at least make your Policy configuration a bit easier to understand is to be able [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s an ongoing problem with maintaining a system that has all the configuration possibilities of FIM. Documentation is usually out of date the moment it&#8217;s written and it&#8217;s a cumbersome way to try and understand a system anyway. One thing that can at least make your Policy configuration a bit easier to understand is to be able to see which MPRs use which Sets and Workflows. Now I know you can see this info if you look at the MPR object &#8211; but what if I&#8217;m looking at a Set or Workflow? How do I quickly see which MPRs are using that object, and thereby assess its purpose?</p>
<p><span id="more-2017"></span></p>
<p>Searching is cumbersome and I&#8217;ll have to specify multiple possible MPR attributes. It&#8217;s also no good if I want to review a number of Sets or Workflows at once.</p>
<p>So what I decided to do was write a script which updates Set and Workflow objects with a list of the MPRs using them. I started out with the Description field but quickly ran up against the length limit, so instead I created a new <em>unindexed string</em> attribute called &#8220;ReferringMPRs&#8221;, which I bound to both the Set and WorkflowDefinition object types. I&#8217;ve added this attribute to the Search Scope definitions so it&#8217;s easy to see:</p>
<p><a href="http://www.wapshere.com/missmiis/wp-content/uploads/2012/05/ReferringMPRs.jpg"><img class="alignnone size-full wp-image-2018" title="ReferringMPRs" src="http://www.wapshere.com/missmiis/wp-content/uploads/2012/05/ReferringMPRs.jpg" alt="" width="1058" height="337" /></a></p>
<p>&nbsp;</p>
<p>Next I wrote a script which I schedule to run once a week. It updates the ReferringMPRs attribute on each Set and WorkflowDefinition with the list of MPRs referencing it. Note I don&#8217;t differentiate on where the MPR is using the object &#8211; ie I don&#8217;t care which phase the Workflow runs in, or which role the Set is performing. When trying to figure out what a Set or Workflow is used for I often won&#8217;t need this level of detail &#8211; it&#8217;s enough to know that the MPR is using it somehow. You are of course welcome to take the script and modify it if you think it should do more.</p>
<p>On a suggestion from my colleague Pete Wass I added an extra function to the script. If you feed it a folder name it will create a datestamped report in that folder if it finds differences in the list of referring MPRs.</p>
<p>You can grab a copy of the script from the <a href="https://unifysolutions.jira.com/wiki/display/FIMTEAMCOM/Documentation+Scripts">FIM Team Scripts site</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/a-script-to-make-fim-policy-self-documenting/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/a-script-to-make-fim-policy-self-documenting</feedburner:origLink></item>
		<item>
		<title>Search Scope not appearing</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/evO-xWlB2xQ/search-scope-not-appearing</link>
		<comments>http://www.wapshere.com/missmiis/search-scope-not-appearing#comments</comments>
		<pubDate>Wed, 16 May 2012 00:04:03 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[Search Scopes]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=2021</guid>
		<description><![CDATA[Just a quick one because I&#8217;ve gone and done this again.
I created a new Search Scope, absolutely certain the usage keywords and permissions are all correct, and the thing just won&#8217;t appear, no errors, nuthin.
My problem was entering the &#8220;Attribute Searched&#8221; list of attributes in the same way as the &#8220;Attribute&#8221; list &#8211; ie semi-colon [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick one because I&#8217;ve gone and done this <em>again</em>.</p>
<p>I created a new Search Scope, absolutely certain the usage keywords and permissions are all correct, and the thing just won&#8217;t appear, no errors, nuthin.<span id="more-2021"></span></p>
<p>My problem was entering the &#8220;Attribute Searched&#8221; list of attributes in the same way as the &#8220;Attribute&#8221; list &#8211; ie semi-colon separated rather than on seperate lines. Am I the only one who finds it confusing that these two very similar fields must be filled in in a different way?</p>
<p><a href="http://www.wapshere.com/missmiis/wp-content/uploads/2012/05/SS-attribute1.jpg"><img class="alignnone size-full wp-image-2022" title="SS-attribute1" src="http://www.wapshere.com/missmiis/wp-content/uploads/2012/05/SS-attribute1.jpg" alt="" width="660" height="209" /></a></p>
<p>&nbsp;</p>
<p><a href="http://www.wapshere.com/missmiis/wp-content/uploads/2012/05/SS-attribute2.jpg"><img class="alignnone size-full wp-image-2023" title="SS-attribute2" src="http://www.wapshere.com/missmiis/wp-content/uploads/2012/05/SS-attribute2.jpg" alt="" width="727" height="76" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/search-scope-not-appearing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/search-scope-not-appearing</feedburner:origLink></item>
		<item>
		<title>Migration Scripts and FIM Team Community Site</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/CBx_-k9UqFc/migration-scripts-and-fim-team-community-site</link>
		<comments>http://www.wapshere.com/missmiis/migration-scripts-and-fim-team-community-site#comments</comments>
		<pubDate>Tue, 15 May 2012 06:47:29 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[FIM Sync Service]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[Unify]]></category>
		<category><![CDATA[VBScript]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=2010</guid>
		<description><![CDATA[Following on from my recent post about Upgrading MIIS/ILM to FIM I&#8217;ve now posted the helper scripts mentioned in that post (and demo&#8217;d in my TEC session) on the brand new FIM Team Community site.
We&#8217;ll be putting various goodies on this site that we want to make publicly available and the other thing you&#8217;ll find there [...]]]></description>
			<content:encoded><![CDATA[<p>Following on from my recent post about <a href="http://www.wapshere.com/missmiis/upgrading-miisilm-to-fim">Upgrading MIIS/ILM to FIM</a> I&#8217;ve now posted the helper scripts mentioned in that post (and demo&#8217;d in my TEC session) on the <a href="https://unifysolutions.jira.com/wiki/display/FIMTEAMCOM/Scripts">brand new FIM Team Community site</a>.</p>
<p>We&#8217;ll be putting various goodies on this site that we want to make publicly available and the other thing you&#8217;ll find there right now are the tools to set up your very own Replay MA, as presented by <a href="http://bobbradley1967.wordpress.com/">Bob Bradley</a> at TEC. This clever idea of Bob&#8217;s allows the Import drop file from any other MA to be replayed into the FIM Sync service via a second, LDIF MA. The main use we put this to is replaying the FIM MA, thus giving us a way to apply advanced import flow rules and manual precedence to data coming from the FIM Portal. Very neat!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/migration-scripts-and-fim-team-community-site/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/migration-scripts-and-fim-team-community-site</feedburner:origLink></item>
		<item>
		<title>New FIM Blog</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/Fm0yrcuGH8o/new-fim-blog</link>
		<comments>http://www.wapshere.com/missmiis/new-fim-blog#comments</comments>
		<pubDate>Sun, 06 May 2012 21:48:21 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=2004</guid>
		<description><![CDATA[In my recent TEC roundup post I mentioned Eihab Isaac who knocked all our socks off with his clever FIM Portal UI work. I&#8217;m so thrilled that Eihab has now started a blog, all the better to share some of his cleverness with the rest of us! Welcome to the world of blogging Eihab, and [...]]]></description>
			<content:encoded><![CDATA[<p>In my recent TEC roundup post I mentioned Eihab Isaac who knocked all our socks off with his clever FIM Portal UI work. I&#8217;m so thrilled that Eihab has now started a blog, all the better to share some of his cleverness with the rest of us! Welcome to the world of blogging Eihab, and everyone else, go check out <a href="http://fimcreativethoughts.blogspot.com">http://fimcreativethoughts.blogspot.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/new-fim-blog/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/new-fim-blog</feedburner:origLink></item>
		<item>
		<title>Upgrading MIIS/ILM to FIM</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/QNG3IP63iMs/upgrading-miisilm-to-fim</link>
		<comments>http://www.wapshere.com/missmiis/upgrading-miisilm-to-fim#comments</comments>
		<pubDate>Sun, 06 May 2012 03:24:05 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[ILM 2007]]></category>
		<category><![CDATA[MIIS 2003]]></category>
		<category><![CDATA[Password Sync]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=1991</guid>
		<description><![CDATA[In this post I will offer general advice about migrating MIIS/ILM Sync to FIM Sync, supplementing the information in the Migration Guide on Technet. I&#8217;m looking at this purely as a Sync Service to Sync Service migration so there will be nothing about adding the FIM MA, replacing classic rules with declarative, or any of [...]]]></description>
			<content:encoded><![CDATA[<p>In this post I will offer general advice about migrating MIIS/ILM Sync to FIM Sync, supplementing the information in the <a href="http://technet.microsoft.com/en-us/library/ff608268(v=ws.10).aspx">Migration Guide on Technet</a>. I&#8217;m looking at this purely as a Sync Service to Sync Service migration so there will be nothing about adding the FIM MA, replacing classic rules with declarative, or any of the other changes you may be planning to  take advantage of FIM Portal functionality.</p>
<p><span id="more-1991"></span></p>
<h3>No In-Place Upgrade</h3>
<p>The platform requirements are quite different for FIM as compared to MIIS/ILM, in particular we&#8217;re now on a 64-bit platform, so it shouldn&#8217;t be a surprise to anyone that this is a migration to a new server rather than an in-place upgrade. So the first thing you will need to do is prepare your new server as described in the <a href="http://technet.microsoft.com/en-us/library/ee534909(v=ws.10).aspx">Installation Guide</a>.</p>
<h3>Migrate or Re-Design?</h3>
<p>The first question you need to consider is this: are you happy enough with the existing  MIIS/ILM configuration to want to migrate it to FIM, or is it time to start afresh with a new design? From a simplistic, high-level POV:</p>
<p>Re-Design if:</p>
<ul>
<li>Current system has too many problems to continue with,</li>
<li>Requirements have changed drastically,</li>
<li>Planning on using new features in a big way.</li>
</ul>
<p>Migrate if:</p>
<ul>
<li>Main goal is to get on a supported platform with minimal change,</li>
<li>Some changes needed (eg., replacing an MA) but it&#8217;s not a total overhaul,</li>
<li>No budget for a re-design right now.</li>
</ul>
<h3>Migration Method 1: Database Transfer</h3>
<p>There are essentially two methods to do the migration &#8211; and the first is the database transfer method, which transfers both configuration and data.</p>
<ol>
<li>Start on MIIS SP2 or higher,</li>
<li>Backup the source database (it&#8217;s recommended to clear the run history first but that&#8217;s just to reduce DB size, there&#8217;s no other technical reason),</li>
<li>Restore it to the new DB server with the name &#8220;FIMSynchronizationService&#8221;,</li>
<li>Install FIM Sync, telling it to use the restored DB, and providing the encryption keys,</li>
<ul>
<li>Note if you don&#8217;t have a copy of the encryption keys just export them on the old server using miiskmu.exe,</li>
</ul>
<li>Transfer any supporting scripts, scheduled tasks, staging databases, log folders, and whatever else you&#8217;ve got going on around the Sync Service and forming part of its ecosystem.</li>
</ol>
<p>You should now have a FIM Sync Service that looks remarkably like your old Sync Service. It will also have all the contents of the Extensions directory already there as copies are stored in the database.</p>
<h3>Migration Method 2: Config Export/Import</h3>
<p>The second method transfers configuration only:</p>
<ol>
<li>Export the Metaverse and MA configurations from the source server,</li>
<li>Build your new FIM server with a new, empty database,</li>
<li>Import your Metaverse and MA configurations,</li>
<li>Transfer Extension dlls,</li>
<li>Import connector spaces from the data sources,</li>
<li>Synchronise everything &#8211; making sure projections and joins  all happen properly,</li>
<li>Transfer scripts etc.</li>
</ol>
<p>This method has the advantage of starting with a clean database, but you  may have a lot of work to do in re-instating all those joins. Particularly if there&#8217;s a legacy of manual joins, potential duplicates, and non-existant breadcrumbing.</p>
<h3>Combination Method</h3>
<p>In some cases it will make sense to do a combination of the above methods. Say you want to use the new Lotus Notes MA but the rest of your MAs are fine as they are. You can use the database transfer method, but then delete and recreate the Notes MA on the new server. In this way a good proportion of your data and joins stay in place, and you just need to worry about re-importing and re-joining where it&#8217;s really necessary.</p>
<h3>Which Migration Method?</h3>
<p>After having used both methods (actually, all 3 if you count &#8220;combination&#8221; as a seperate one) my advice is to go with the database transfer as the first option. You will save time on re-importing and, most importantly, retain your existing joins.</p>
<p>There may be times when a config migration is a better bet. Perhaps the data in the Metaverse is in such a state (orphaned objects, bad joins, duplicates) that a good clean out is called for. Or perhaps you&#8217;re migrating some MAs and retiring others. Clearly you&#8217;ll have to assess the situation before deciding which method suits best.</p>
<h3>Recompiling Extensions</h3>
<p>For a long time I thought you had to recompile the extensions. But I was wrong &#8211; <em>you don&#8217;t have to recompile</em>.</p>
<p>The doco says &#8220;recommended&#8221; but only for &#8220;performance reasons if you did not originally compile them to be platform independent&#8221;. By default the code should have been compiled to be platform independent so there is <strong>no problem running the 32-bit extensions</strong>. In addition, to debunk a couple of things I&#8217;ve read on the forum, you <em>can</em> recompile them using the Microsoft.MetadirectoryServices.dll on the new x64 server, and you <em>can</em> attach the debugger.</p>
<p>So my advice is try them and see. They may work just fine without any need to recompile to x64.</p>
<p>I will make one point about CSExtensions &#8211; I have a couple of XMAs on FIM that I now seem to have to run in process where they used to run fine out of process. So if you&#8217;re getting a stopped-extension-dll-load error it is worth making sure you have the &#8220;in process&#8221; option ticked.</p>
<h3>Full Syncs</h3>
<p>The official doc says full syncs following migration is a &#8220;good practise&#8221;. Personally I would say it is essential. How can you really verify that everything is working properly if you don&#8217;t do full syncs? Problems to look out for however:</p>
<ul>
<li>Environments where full syncs take days to run,</li>
<li>MAs that are never full sync&#8217;d for various reasons &#8211; perhaps because they&#8217;re running external processes from MV or MA extensions, or because they&#8217;re doing some time-based logic which relies on only ever doing deltas. These are of course <em>terrible design</em>, but that doesn&#8217;t mean they don&#8217;t happen, and that some hapless sod won&#8217;t be called in to migrate them.</li>
</ul>
<p>For my own peace of mind, I would want to run Full Syncs with the provisioning code turned off and then on before I declared &#8220;job done&#8221;.</p>
<h3>Password Sync</h3>
<p>There&#8217;s not a lot to say about migrating password sync because it should be pretty straight forward. It&#8217;s not essential to upgrade PCNS on your DCs. When you switch the PCNS target to the new Sync server there may be a delay while the change replicates around your AD sites, but in the meantime the old server can still be servicing password sync, even if you&#8217;ve stopped all the scheduled jobs.</p>
<h3>Migration Plan</h3>
<p>Sometimes customers ask about a progressive migration; migrating a couple of MAs at a time. They perhaps think this would reduce risk and complexity but I think just the opposite. It greatly increases risk as I now have to meddle with the old server and could inadvertently break something there. I have to gain a much deeper understanding of the configuration to work out how to safely extract a subset of MAs. I have essentially doubled my workload while taking on responsibility for two servers instead of one. Not a path I&#8217;d gladly take.</p>
<p>So the preferred path is to do a full migration to the new server, get everything working there, and then switch functionality in one go.</p>
<h3>Helper Scripts</h3>
<p>I&#8217;ve written a bunch of scripts to help with the pre-migration analysis, any CS reimporting that might happen during the migration, and then validating the job at the end. You can download a copy of them <a href="https://unifysolutions.jira.com/wiki/display/FIMTEAMCOM/Sync+Service+Migration">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/upgrading-miisilm-to-fim/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/upgrading-miisilm-to-fim</feedburner:origLink></item>
		<item>
		<title>My TEC 2012 highlights</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/ArYP473t4GA/my-tec-2012-highlights</link>
		<comments>http://www.wapshere.com/missmiis/my-tec-2012-highlights#comments</comments>
		<pubDate>Fri, 04 May 2012 05:18:44 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Conferences]]></category>
		<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[FIM 2010 R2]]></category>
		<category><![CDATA[Office 365]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[Unify]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=1971</guid>
		<description><![CDATA[Some of my memorable moments from TEC this year&#8230;

Most fun helping out a fellow MVP
I arrived a couple of days early so was able to do a run through of Craig Martin&#8217;s half-day workshop on managing FIM with PowerShell. Craig claimed to be worried about the labs and the text and whether there was enough and [...]]]></description>
			<content:encoded><![CDATA[<p>Some of my memorable moments from TEC this year&#8230;</p>
<p><span id="more-1971"></span></p>
<h3>Most fun helping out a fellow MVP</h3>
<p>I arrived a couple of days early so was able to do a run through of Craig Martin&#8217;s half-day workshop on managing FIM with PowerShell. Craig claimed to be worried about the labs and the text and whether there was enough and whether it would work&#8230;. I don&#8217;t know why because he&#8217;d clearly put enourmous amounts of effort into it and the payoff was an incredibly useful, practical learning experience for the attendees. Great work Craig, and I hope you get to deliver it again!</p>
<h3>Coolest FIM Ideas</h3>
<p>FIM is not the most fashionable of products, but these sessions did really make everyone sit up and say &#8220;now that <em>is</em> cool!&#8221;</p>
<p><strong>Eihab Isaac&#8217;s replacement for selected RCDC forms</strong></p>
<p>When I&#8217;ve heard talk of designing a web form to replace the underwhelming user experience of the FIM Portal I imagined something completely seperate to the Portal. The genius of Eihab&#8217;s solution is that he is selectively replacing RCDC-based forms, while still using all the other functionality of the Portal. The forms are actually hosted on IIS outside the Portal, and communicate with the Portal via web services, but to the user they appear seamlessly integrated. So when you click the &#8220;New User&#8221; button you get what we all wish would pop up &#8211; a form with immediate data validation including helpful messages to the user, dynamic modification of controls and drop-down lists based on other options chosen, and a wider variety of controls than we get in the RCDC.</p>
<p>At the same time he also solved the problem of allowing an Approver to go in and modify some details before approving &#8211; now that is cool!</p>
<p>For more info talk to the lovely people at <a href="http://www.zevainc.com/">Zeva</a>.</p>
<p><strong>Rob Allen&#8217;s FIM phone app</strong></p>
<p>Rob demonstrated a pair of impressively snazzy looking apps, for iPhone and Windows mobile, that allow FIM tasks such as approving a request, resetting your password, and adding a user to a group. Both apps are available on their respective app stores (look for &#8220;FIM Mobile&#8221;) if you want to take a look. Unfortunately I have Android so will have to wait until Rob and the other clever boys at <a href="http://www.activeidm.com">ActiveIDM</a> write one of those too.</p>
<p><strong>Bob Bradley&#8217;s Replay MA</strong></p>
<p>Bob is my colleague at Unify, and I even had a hand in this presentation, so including this does seem a little self-congratulatory &#8211; but it is a really cool idea! Essentially Bob takes the import drop file from FIM MA import jobs (full and delta), converts them to LDIF using an XSLT stylesheet, and feeds them back into the Sync Service via a second MA (the &#8220;Replay MA&#8221;). This is a completely normal (albeit import-only) MA to which you can apply advanced import flow rules and manual precedence rules <em>to data generated in the FIM Portal</em>. The number of people sitting there saying &#8220;now why didn&#8217;t I think of that?!&#8221; made me laugh &#8211; the simplest ideas are often not self-evident at all.</p>
<p>There will be more details on this coming soon, including the scripts and stylesheets.</p>
<h3>Most fun dissing a fellow MVP</h3>
<p>You have to hand it to David Lundell for being a great sport. His &#8220;Declarative vs Classic&#8221; FIM showdown was always going to be controversial, but then to try and claim that declarative was the winner??? Clearly he was just trying to wind us all up <img src='http://www.wapshere.com/missmiis/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />   I think everyone had a lot of fun in that session.</p>
<h3>Weirdest 1am conversation</h3>
<p>Those Powershell dudes can talk PowerShell <em>any </em>time of the day or night. This is the second year running I&#8217;ve ended up in some kind of intense PowerShell related conversation, including whipped-out laptops and kamikaze demos, at well past the time I should have been in bed. This year I was hearing all about <a href="http://start-automating.com/">James Brundage</a>&#8216;s mad-scientist type plans to take over the entire world using his PowerShell super-powers&#8230; at least the websites for starters. Gotta love all that crazy passion and inspiration!</p>
<h3>R2 Snippet of the week</h3>
<p>It was all a little light-on for R2, and in particular I think a lot of us would have appreciated a session from Microsoft on the BHold aquisition and integration&#8230; but there was one excellent little snippet in <strong></strong>Eric Huebner&#8217;s talk. Apparently R2 will include &#8220;Request Splitting&#8221;.</p>
<p>My understanding, and I really do hope I got this right, is that this will overcome the current problem of all changes being bundled into a single request object and, if any approvals are needed, FIM sends <em>all changes</em> to <em>all approvers,</em> any one of which being able to approve or reject the entire list.</p>
<p>What we really want of course is for changes that don&#8217;t need approval to go through unobstructed. And where changes do need approval they should go to the correct approver for that particular change &#8211; which may mean a couple of different people getting to approve seperate attribute changes.</p>
<p>This made me super happy as the single request architecture has been a big thorn in my side lately!</p>
<h3>Most Interesting Sponsor Solution</h3>
<p>I really like <a href="http://www.optimalidm.com/">OptimalIDM</a>&#8216;s solution for multi-forest/multi-environment and Office 365. Regular readers of this blog will know I did a big, messy, multi-forest BPOS project in 2010-2011, and if I were doing that same project now I would be looking seriously at this product. At a high level, they solve some of the key problems faced by any complex organisation trying to move to Office 365:</p>
<ul>
<li>Their Virtual Directory presents a unified source directory to DirSync, taking objects from whatever directories you have about the place, <em>not just AD</em> &#8211; so if you have a Lotus Notes LDAP directory they can DirSync your users up to Office 365 without needing to also create them in a local AD!</li>
<li>You can control which objects from your source directories make it into the Virtual Directory, overcoming the vacuum cleaner tendencies of DirSync.</li>
<li>They solve the &#8220;public UPN&#8221; problem of federating with Office 365 by allowing you to map the UPN in the Virtual Directory. So if your local AD is myorg.local but the public domain is myorg.com you won&#8217;t have to rename all your user UPN&#8217;s &#8211; just let the Virtual Directory simulate it. Also for non-AD users it can provide a virtual UPN in the correct format.</li>
<li>Following on from the last point, non-AD users can in fact use the federated login to Office 365. By acting as an account store for ADFS, OptimalIDM&#8217;s product can proxy the authentication request to any other directory. Again really great if you&#8217;re migrating from non-Exchange to Office 365.</li>
</ul>
<p>For more info see <a href="http://www.optimalidm.com/Products/VIS/VirtualIdentityServerforOffice365/">http://www.optimalidm.com/Products/VIS/VirtualIdentityServerforOffice365/</a></p>
<h3>General best thing about going to TEC</h3>
<p>Seeing people who feel like old friends now even though I only see them once a year, and making new friends!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/my-tec-2012-highlights/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/my-tec-2012-highlights</feedburner:origLink></item>
		<item>
		<title>Using Powershell to update an RCDC configuration</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/m083JbHPrCw/using-powershell-to-update-an-rcdc-configuration</link>
		<comments>http://www.wapshere.com/missmiis/using-powershell-to-update-an-rcdc-configuration#comments</comments>
		<pubDate>Wed, 25 Apr 2012 00:19:39 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[RCDC]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=1961</guid>
		<description><![CDATA[I was stuck in one of those loops where you&#8217;re trying to track down an error in a RCDC by commenting out sections of the configuration file, uploading, recycling app pool, refreshing your browser, testing, go back to the beginning&#8230; I thought &#8220;there&#8217;s got to be a better way!&#8221; &#8211; and, as is so often the [...]]]></description>
			<content:encoded><![CDATA[<p>I was stuck in one of those loops where you&#8217;re trying to track down an error in a RCDC by commenting out sections of the configuration file, uploading, recycling app pool, refreshing your browser, testing, go back to the beginning&#8230; I thought &#8220;there&#8217;s got to be a better way!&#8221; &#8211; and, as is so often the case, the better way is to write a quick powershell script.</p>
<p><span id="more-1961"></span></p>
<p>This script updates the ConfigurationData attribute of the named RCDC with the contents of a file. It then recycles the Sharepoint &#8211; 80 app pool.</p>
<pre>PARAM($RCDCName, $FilePath)

# Get FIMPowershell.ps1 from http://technet.microsoft.com/en-us/library/ff720152(v=ws.10).aspx
. ./FIMPowershell.ps1

# Update Configuration

$content = Get-Content $FilePath

$filter = "/ObjectVisualizationConfiguration[DisplayName = '" + $RCDCName + "']"
$RCDC = export-fimconfig -customconfig ($filter)

$ModifyImportObject = ModifyImportObject -TargetIdentifier $RCDC.ResourceManagementObject.ObjectIdentifier -ObjectType "ObjectVisualizationConfiguration"
SetSingleValue $ModifyImportObject "ConfigurationData" $content
import-fimconfig -importObject $ModifyImportObject

# Recycle App Pool

$AppPool = "W3SVC/APPPOOLS/SharePoint - 80"
$Path = "IISApplicationPool.Name='$AppPool'"

Invoke-WMIMethod Recycle -Path $Path  -Namespace root\MicrosoftIISv2 -Authentication PacketPrivacy</pre>
<p>&nbsp;</p>
<p>The one thing this won&#8217;t do is stop that first connection error when you go to test. I tried Thomas&#8217; <a href="http://setspn.blogspot.com.au/2011/06/fim-2010-warm-up-your-portal-iis.html">warm up FIM </a>approach but it didn&#8217;t work for me &#8211; possibly because I was testing using a different account to the one that had &#8220;touched&#8221; the Portal.</p>
<p>In case you&#8217;re wondering whether I&#8217;m so random in my RCDC changes that I couldn&#8217;t just back out the last change &#8211; it was a transfer of configuration between environments that triggered the error, and actually permissions were at fault, but I didn&#8217;t know which permissions until I&#8217;d identified the faulty RCDC controls. Somehow two attributes appeared to be in the MPR, but the rights weren&#8217;t assigned. I removed and re-added the attributes and then the RCDC worked properly. Some kind of issue with the config migration I guess.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/using-powershell-to-update-an-rcdc-configuration/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/using-powershell-to-update-an-rcdc-configuration</feedburner:origLink></item>
		<item>
		<title>My “Migration Toolbox” is coming together nicely</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/0eWB_oUFn7k/my-migration-toolbox-is-coming-together-nicely</link>
		<comments>http://www.wapshere.com/missmiis/my-migration-toolbox-is-coming-together-nicely#comments</comments>
		<pubDate>Sun, 15 Apr 2012 01:05:14 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=1955</guid>
		<description><![CDATA[At TEC I&#8217;ll be presenting a session on migrating MIIS/ILM to FIM 2010. The meaty goodness of the session will be a collection of scripts that can help with analysing the environment ahead of the migration, with getting through some tricky migration steps that can often occur, and with general post-migration confirmations.
The session should be particularly [...]]]></description>
			<content:encoded><![CDATA[<p>At TEC I&#8217;ll be presenting a session on migrating MIIS/ILM to FIM 2010. The meaty goodness of the session will be a collection of scripts that can help with analysing the environment ahead of the migration, with getting through some tricky migration steps that can often occur, and with general post-migration confirmations.</p>
<p>The session should be particularly of interest to consultants who may have to estimate and conduct migrations, sometimes with no prior experience of the customer&#8217;s environment.</p>
<p>If you&#8217;re going to be at TEC, do come and say hi! If you&#8217;re still thinking of registering, what are you waiting for? <a href="http://www.theexpertsconference.com/us/2012/">http://www.theexpertsconference.com/us/2012/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/my-migration-toolbox-is-coming-together-nicely/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/my-migration-toolbox-is-coming-together-nicely</feedburner:origLink></item>
		<item>
		<title>A best practise for MPRs – separate Grants Permission from Workflow</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/JcDqGR_CJD8/a-best-practise-for-mprs-separate-grants-permission-from-workflow</link>
		<comments>http://www.wapshere.com/missmiis/a-best-practise-for-mprs-separate-grants-permission-from-workflow#comments</comments>
		<pubDate>Sat, 31 Mar 2012 01:18:18 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[MPR]]></category>
		<category><![CDATA[Workflow]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=1942</guid>
		<description><![CDATA[In my current project I&#8217;ve created around 40 Workflows and over 80 MPRs &#8211; and this is just phase one! In an effort to keep things tidy I&#8217;ve been using naming conventions and a consistent design approach, and one thing I found myself doing was separating MPRs that grant permissions from MPRs that run Workflows.

This [...]]]></description>
			<content:encoded><![CDATA[<p>In my current project I&#8217;ve created around 40 Workflows and over 80 MPRs &#8211; and this is just phase one! In an effort to keep things tidy I&#8217;ve been using naming conventions and a consistent design approach, and one thing I found myself doing was separating MPRs that grant permissions from MPRs that run Workflows.</p>
<p><span id="more-1942"></span></p>
<p>This struck me as a good idea for a number of reasons.</p>
<p>Mostly you want to trigger Workflow based on something changing but you don&#8217;t much care how the change happened. The Set transition MPR is ideally suited here &#8211; we don&#8217;t care how the object got into the set, but it did, so now we&#8217;re going to do something else.</p>
<p>However it&#8217;s often better to use a Request MPR so that the resulting changes are still tied to the original (&#8220;parent&#8221;) request and you can, for example, send a notification back to the original Requestor.</p>
<p>In a typical FIM Portal environment you will have a number of MPRs granting access to the same resource type &#8211; for example:</p>
<ul>
<li>Self can change some attributes,</li>
<li>Manager can change some attributes,</li>
<li>Particular people may be designated elevated access &#8211; eg., Helpdesk, IT Support, department assistants.</li>
</ul>
<p>All of this can stack up to a number of permission-granting MPRs which overlap on their attribute inclusion lists.</p>
<p>Now let us say you also want to launch workflows when certain attributes change. The only way to do this is to target the MPR at the specifc attribute/s where a change should trigger the particular workflow. If these MPRs also grant permissions you run the risk of one requestor triggering the same workflow multiple times &#8211; perhaps because they&#8217;re a department assistant but changing their own profile. When two workflows try to change the same attribute in the one request the result is &#8220;Cannot insert duplicate key row&#8221; errors and a failure of both workflows.</p>
<p>When you separate the MPRs into those that grant permissions and those that run workflows, things become a lot simpler. Now all your request-type workflow MPRs can generically have &#8220;All People&#8221; as the Requestor Set, because your permission granting MPRs will be restricting who can actually make this change anyway. Ideally you will also have each Workflow being called by only one MPR.</p>
<p>I now have a bunch of &#8220;Access Control&#8221; MPRs and a bunch of &#8220;Workflow&#8221; MPRs and I&#8217;ll be keeping it that way!</p>
<p>When I mentioned to <a href="http://thefimteam.com/meet-the-fim-team/#11">Bob Bradley</a> that I&#8217;d done this his response was &#8220;oh yes I always do it that way&#8221; &#8211; so that, to me, is a Best Practise!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/a-best-practise-for-mprs-separate-grants-permission-from-workflow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/a-best-practise-for-mprs-separate-grants-permission-from-workflow</feedburner:origLink></item>
		<item>
		<title>In praise of String Resources</title>
		<link>http://feedproxy.google.com/~r/missmiis/~3/xb-VIcEdmUQ/in-praise-of-string-resources</link>
		<comments>http://www.wapshere.com/missmiis/in-praise-of-string-resources#comments</comments>
		<pubDate>Fri, 16 Mar 2012 03:30:49 +0000</pubDate>
		<dc:creator>Carol</dc:creator>
				<category><![CDATA[FIM 2010]]></category>
		<category><![CDATA[RCDC]]></category>

		<guid isPermaLink="false">http://www.wapshere.com/missmiis/?p=1929</guid>
		<description><![CDATA[Anyone who&#8217;s spent any time configuring RCDCs knows it&#8217;s a time consuming and often frustrating process. I&#8217;m sure I&#8217;m not the only one who&#8217;s sat there progressively uncommenting blocks of XML, trying to track down that one little error that&#8217;s screwed up the whole form.
Certainly I don&#8217;t want my customer to have to go through [...]]]></description>
			<content:encoded><![CDATA[<p>Anyone who&#8217;s spent any time configuring RCDCs knows it&#8217;s a time consuming and often frustrating process. I&#8217;m sure I&#8217;m not the only one who&#8217;s sat there progressively uncommenting blocks of XML, trying to track down that one little error that&#8217;s screwed up the whole form.</p>
<p>Certainly I don&#8217;t want my customer to have to go through this every time someone complains that it should be &#8220;Family Name&#8221; instead of &#8220;Surname&#8217;, or whatever the flavour of the month happens to be. Sure you can set it up so that each field title and description comes from the schema, but you can also go a step further with String Resources. <span id="more-1929"></span></p>
<p>You don&#8217;t have to look at an RCDC very long to notice a lot of variables that look like this: %SYMBOL_AFCaption_END%.</p>
<p>But where are they defined? The answer is the String Resources field which you can get at through the Localization tab of the RCDC configuration. The String Resources are actually there to allow you to customise the Portal for different languages. But even in a single-language environment it can be good to use them.</p>
<p><a href="http://www.wapshere.com/missmiis/wp-content/uploads/2012/03/strings.jpg"><img class="alignnone size-full wp-image-1931" title="strings" src="http://www.wapshere.com/missmiis/wp-content/uploads/2012/03/strings.jpg" alt="" width="641" height="326" /></a></p>
<p>&nbsp;</p>
<p>Like the RCDC configuration itself you can export the String Resources as an XML file, edit them, and load them back in. Just use the file control underneath the String Resources field. You will need to recycle the Sharepoint:80 app pool after uploading if you want to see an immediate effect.</p>
<p><a href="http://www.wapshere.com/missmiis/wp-content/uploads/2012/03/string-upload.jpg"><img class="alignnone size-full wp-image-1932" title="string upload" src="http://www.wapshere.com/missmiis/wp-content/uploads/2012/03/string-upload.jpg" alt="" width="528" height="141" /></a></p>
<p>And the great thing is that you can replace <em>every bit of hard-coded text in the RCDC with a String Resource.</em></p>
<p>The text on the tab captions can be controlled by a string resource, as is already the case for the default RCDC tabs:</p>
<pre>&lt;my:Grouping my:Name="Identification" my:Caption="%SYMBOL_IdentificationCaption_END%" my:Enabled="true" my:Visible="true"&gt;</pre>
<p>Something that I&#8217;ve just gone through and done in the RCDCs on my current project is to add a Hint parameter to every single control:</p>
<pre>&lt;my:Control my:Name="PreferredFirstName" my:TypeName="UocTextBox" my:Caption="{Binding Source=schema, Path=PreferredFirstName.DisplayName}" my:Description="{Binding Source=schema, Path=PreferredFirstName.Description}"
my:RightsLevel="{Binding Source=rights, Path=PreferredFirstName}"  my:Hint="%SYMBOL_PreferredFirstNameHint_END%" &gt;
	&lt;my:Properties&gt;
		&lt;my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=PreferredFirstName.Required}"/&gt;
		&lt;my:Property my:Name="Columns" my:Value="34"/&gt;
		&lt;my:Property my:Name="MaxLength" my:Value="128"/&gt;
		&lt;my:Property my:Name="Text" my:Value="{Binding Source=object, Path=PreferredFirstName, Mode=TwoWay}"/&gt;
	&lt;/my:Properties&gt;
&lt;/my:Control&gt;</pre>
<p>Most of them are just set to empty strings in the String Resources setting, but the customer should now find it far more straight-forward to set a hint if one is needed:</p>
<pre> &lt;SymbolResourcePair Symbol="PreferredFirstNameHint" ResourceString=""/&gt;</pre>
<p>Here&#8217;s another example: using String Resources so set the search box text in a UocIdentityPicker:</p>
<pre>&lt;my:Control my:Name="Manager" my:TypeName="UocIdentityPicker" my:Caption="{Binding Source=schema, Path=Manager.DisplayName}" my:Description="{Binding Source=schema, Path=Manager.Description}"
my:RightsLevel="{Binding Source=rights, Path=Manager}"  my:Hint="%SYMBOL_ManagerHint_END%"&gt;
	&lt;my:Properties&gt;
		&lt;my:Property my:Name="Required" my:Value="true"/&gt;
		&lt;my:Property my:Name="Mode" my:Value="SingleResult"/&gt;
		&lt;my:Property my:Name="ObjectTypes" my:Value="Person"/&gt;
		&lt;my:Property my:Name="UsageKeywords" my:Value="ActiveAD"/&gt;
		&lt;my:Property my:Name="ColumnsToDisplay" my:Value="DisplayName, Department"/&gt;
		&lt;my:Property my:Name="AttributesToSearch" my:Value="FirstName, LastName, PreferredFirstName, AccountName"/&gt;
		&lt;my:Property my:Name="Value" my:Value="{Binding Source=object, Path=Manager, Mode=TwoWay}"/&gt;
		&lt;my:Property my:Name="ListViewTitle" my:Value="%SYMBOL_ManagerListViewTitle_END%"/&gt;
		&lt;my:Property my:Name="PreviewTitle" my:Value="%SYMBOL_ManagerPreviewTitle_END%"/&gt;
		&lt;my:Property my:Name="MainSearchScreenText" my:Value="%SYMBOL_ManagerSearchText_END%"/&gt;
	&lt;/my:Properties&gt;
&lt;/my:Control&gt;</pre>
<p>And the variables defined in String Resources:</p>
<pre> &lt;SymbolResourcePair Symbol="ManagerHint" ResourceString=""/&gt;
 &lt;SymbolResourcePair Symbol="ManagerListViewTitle" ResourceString="All People"/&gt;
 &lt;SymbolResourcePair Symbol="ManagerPreviewTitle" ResourceString="Selected Person"/&gt;
 &lt;SymbolResourcePair Symbol="ManagerSearchText" ResourceString="Search People"/&gt;</pre>
<p>You can also use them to replace the Text on check boxes, and the Captions on radio control options&#8230; Basicaly anywhere you find yourself hard-coding text in an RCDC have a think: would a String Resource work better here?</p>
<p>And one final plus point &#8211; if you mess up the XML in String Resources by forgetting a quote or something it doesn&#8217;t break your whole form - you just get some missing text and a note in red at the bottom of the form about which variables are missing. Both less risky and easier to troubleshoot than editing the RCDC configuration XML!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wapshere.com/missmiis/in-praise-of-string-resources/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.wapshere.com/missmiis/in-praise-of-string-resources</feedburner:origLink></item>
	</channel>
</rss>

