<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Confused Amused &#187; OCS</title>
	<atom:link href="http://www.confusedamused.com/tags/ocs/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.confusedamused.com</link>
	<description></description>
	<lastBuildDate>Wed, 01 Feb 2012 02:58:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Migrating OCS conference directories to Lync the hard way</title>
		<link>http://www.confusedamused.com/notebook/migrating-ocs-conference-directories-to-lync-the-hard-way/</link>
		<comments>http://www.confusedamused.com/notebook/migrating-ocs-conference-directories-to-lync-the-hard-way/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 02:58:20 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Lync Server 2010]]></category>
		<category><![CDATA[Office Communications Server 2007 R2]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[dbimpexp]]></category>
		<category><![CDATA[directory]]></category>
		<category><![CDATA[lync]]></category>
		<category><![CDATA[OCS]]></category>
		<category><![CDATA[pool]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=1198</guid>
		<description><![CDATA[A few evenings ago I ran into a scenario where moving a conference directory from OCS to Lync failed, and the conference directory ended up in this limbo state where it wasn&#8217;t on Lync, I couldn&#8217;t move it back to OCS, and the conferencing attendant wouldn&#8217;t recognize any PSTNs IDs which were part of the [...]]]></description>
			<content:encoded><![CDATA[<p>A few evenings ago I ran into a scenario where moving a conference directory from OCS to Lync failed, and the conference directory ended up in this limbo state where it wasn&#8217;t on Lync, I couldn&#8217;t move it back to OCS, and the conferencing attendant wouldn&#8217;t recognize any PSTNs IDs which were part of the directory. Not a great scenario.</p>

<p>After running Move-CsConferenceDirectory I could verify the move was in progress, but it never completed. The status would show it was trying to move, and OCS eventually started throwing errors that it no longer had a conference directory, but it never fully made it to Lync. The TargetServerIfMoving parameter stayed populated:</p>

<p><pre><code>Get-CsConferenceDirectory -Identity 5
Identity: 5
ServiceId: UserServer:OCSPOOL.ptown.local
TargetServerIfMoving: UserServer:LYNCPOOL.ptown.local</pre></code></p>

<p>Trying to run Move-CsConferenceDirectory again would consistently fail with the following errors:</p>

<blockquote>WARNING: Move operation failed for conference directory with ID "5". Cannot
perform a rollback because data migration might have already started. Retry the
 operation.<br />
WARNING: Before using the -Force parameter, ensure that you have exported the
conference directory data using DBImpExp.exe and imported the data on the
target pool. Refer to the DBImpExp-Readme.htm file for more information.<br />
Exception from HRESULT: 0xC3EE7950, Microsoft.Rtc.Management.ConferenceDirectoryCmdlets.MoveConferenceDirectoryCmdlet</blockquote>

<p>In the end I needed to export the data from the OCS directory via DbImpExp, force the directory to move, and then import the data. Not the cleanest route, but it works. The order is important, so be patient.</p>

<p>On the OCS pool and database export the conference directory data:</p>

<p><pre><code>DbImpExp.exe /hrxmlfile:C:\Temp\OCSDirectory5.xml /SQLServer:OCS-SQL.ptown.local /restype:confdir</pre></code></p>

<p>Only once you're positive you have a good export (Read: opened the file and checked!), and made a copy of it you can force the Move-CsConferenceDirectory operation:</p>

<p><pre><code>Move-CsConferenceDirectory 5 -TargetPool LYNCPOOL.ptown.local -Force</pre></code></p>

<p>Congrats. You've moved the directory to Lync, but it's empty. Copy the .xml export file to a FE in the Lync pool. On the Lync pool and database import the directory data while specifying the conference directory ID to recover the old data:</p>

<p><pre><code>DbImpExp.exe /import /hrxmlfile:C:\Temp\OCSDirectory5.xml /SQLServer:LYNC-SQL.ptown.local /restype:confdir /dirid:5</pre></code></p>

<p>At this point I could see the directory was no longer moving because TargetServerIfMoving was empty, and the conference attendant was now recognizing PSTN IDs which had been created against this directory.</p>

<p><pre><code>Get-CsConferenceDirectory -Identity 5
Identity: 5
ServiceId: UserServer:LYNCPOOL.ptown.local
TargetServerIfMoving: </pre></code></p>

<p>Again, this is a good reason to always do a DbImpExp.exe dump before moving directories or databases around. Those .XML files can save your skin!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/migrating-ocs-conference-directories-to-lync-the-hard-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitoring OCS and Lync Peak Call Capacity</title>
		<link>http://www.confusedamused.com/notebook/monitoring-ocs-and-lync-peak-call-capacity/</link>
		<comments>http://www.confusedamused.com/notebook/monitoring-ocs-and-lync-peak-call-capacity/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 04:28:03 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Lync Server 2010]]></category>
		<category><![CDATA[Office Communications Server 2007 R2]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[lync]]></category>
		<category><![CDATA[OCS]]></category>
		<category><![CDATA[perfmon]]></category>
		<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=1045</guid>
		<description><![CDATA[Recently I had a customer interested in checking how many concurrent calls a particular OCS Mediation Server was handling. The challenge with this is that separate perfmon counters exist for inbound calls and for outbound calls, but there is not a built-in counter which measures both. So while we could monitor the peak capacity of [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I had a customer interested in checking how many concurrent calls a particular OCS Mediation Server was handling. The challenge with this is that separate perfmon counters exist for inbound calls and for outbound calls, but there is not a built-in counter which measures both. So while we could monitor the peak capacity of each we had no guarantee that these peak values were occurring at the same time.</p>

<p>In order to track this usage I&#8217;ve come up with a Powershell script which grabs these two counters, parses their values, adds them together, and dumps the output into a CSV file. At the end of the monitoring period you can take this CSV into Excel and easily find the peak total call count.</p>

<p><p>Here are some notes on the behavior:</p:
<ul>
<li>The CSV output is date and time, inbound calls, outbound calls, and total calls.</li>
<li>Data is output to the console and to CSV for real-time monitoring.</li>
<li>The default values track usage for a week, polling the counters every 15 seconds. You can change the total number of loops in the script to your liking if you need a longer track record.</li>
<li>If you run the script again it will detect if previous data exists and rename the old file so you don&#8217;t lose anything.</li>
<li>I&#8217;ve run this as a logged in user account, but I imagine you could set it up as a scheduled task to run in the background.</li>
<li>In order to run the script you should first run Set-ExecutionPolicy Unrestricted</li>
</ul></p>

<p>The caveat with the Lync version is now that a Mediation server can use multiple gateways we can&#8217;t see which gateway is being used for each inbound or outbound call. But this still gives an idea of concurrent call capacity flowing through each Mediation role.</p>

<ul>
<li>OCS Version: <a href="http://www.confusedamused.com/downloads/OCSCallData.ps1">OCSCallData.ps1</a></li>
<li>Lync Version: <a href="http://www.confusedamused.com/downloads/LyncCallData.ps1">LyncCallData.ps1</a></li>
</ul>

<p>I hope to improve this in the future, but wanted to make it available for everyone sooner than later.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/monitoring-ocs-and-lync-peak-call-capacity/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>OCS Create Pool Wizard Error: Invalid database parameter</title>
		<link>http://www.confusedamused.com/notebook/ocs-create-pool-wizard-error-invalid-database-parameter/</link>
		<comments>http://www.confusedamused.com/notebook/ocs-create-pool-wizard-error-invalid-database-parameter/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 01:31:20 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Office Communications Server 2007 R2]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[2007]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[OCS]]></category>
		<category><![CDATA[pool]]></category>
		<category><![CDATA[R2]]></category>
		<category><![CDATA[sp2]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=987</guid>
		<description><![CDATA[Recently I had a project where we were moving the OCS databases to a new clustered SQL 2008 (R1) with SP2 Back-End and ran into a lovely new error I&#8217;d never seen before &#8211; also not seen before anywhere on Google!

For starters, we followed the steps outlined on Technet. After we had successfully detached and [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I had a project where we were moving the OCS databases to a new clustered SQL 2008 (R1) with SP2 Back-End and ran into a lovely new error I&#8217;d never seen before &#8211; also not seen before anywhere on Google!</p>

<p>For starters, we followed <a href="http://technet.microsoft.com/en-us/library/dd572422(office.13).aspx">the steps outlined on Technet</a>. After we had successfully detached and attached all databases and ran the LCSCMD.exe step, we launched the Create Pool wizard and attempted to plug in the info for the new SQL cluster. We got this error back:</p>

<blockquote>
An error occurred during the pool backend detection:<br /><br />

Pool backend discovery failed.<br /><br />

Invalid database parameter.
</blockquote>

<p>I double-checked the server name, instance, and FQDN and all looked well. We verified the SQL server was accessible via TCP 1433 and no firewall rules were preventing access, so the error didn&#8217;t make a lot of sense. Obviously there was some kind of parameter that the wizard GUI was not cool with. I thought maybe this was the <a href="http://support.microsoft.com/kb/961944">SQL allow updates issue</a>, but that solution had no effect on this error. There was definitely some validation check the UI was failing on against our new DB.</p>

<p>Since I couldn&#8217;t locate anyone else with this issue I figured my options were to call PSS and extend this process by a few hours, or pull out the ol&#8217; LCSCMD.exe again and try this operation via command line. The Create Pool wizard really is just collecting a bunch of information and then using it to execute the LCSCMD.exe commands in the background so while doing it manually is not fun, it works just as well.</p>

<p>The <a href="http://technet.microsoft.com/en-us/library/dd572972(office.13).aspx">entire syntax for LCSCMD.exe can be found on Techet</a>, but here is the command we ended up running. Please note, conferencing archiving was not implemented so that paramter is not present.</p>

<p><pre><code>LCSCMD.exe /Forest /Action:CreatePool /PoolName:MyOCSPool /PoolBE:MySQLServer.ptown.local\OCSInstance /PoolFQDN:MyOCSPool.ptown.local /InternalWebFQDN:MyOCSPool.ptown.local /ExternalWebFQDN:PublicOCSWebComponents.confusedamused.com /RefDomain:ptown.local /ABOutputlocation:&#92;&#92;MyFileServer\AddressBook /MeetingContentPath:&#92;&#92;MyFileServer\MeetingContent /MeetingMetaPath:&#92;&#92;MyFileServer\MeetingMetadata /AppDataLocation:&#92;&#92;MyFileServer\AppData /ClientUpdateLocation:&#92;&#92;MyFilerServer\ClientUpdates /DBDataPath:"D:\Databases" /DBLogPath:"L:\Logs" /DynDataPath:"D:\Databases" /DynLogPath:"L:\Logs" /ABSDataPath:"D:\Databases" /ABSLogPath:"L:\Logs" /ACDDataPath:"D:\Databases" /ACDLogPath:"L:\Logs"</code></pre></p>

<p>After running the command manually it succeeded with absolutely no issues. The new cluster has been running for over a week now without any issues so I think this is an problem specific to the UI. I&#8217;m not sure exactly what causes it, but our environment was running SQL 2008 with SP2 on top of a 2008 R2 SP1 operating system.</p>

<p>As a sidenote, this process seems to undo any changes made by the OCS2009-DBUpgrade.msi patches. You&#8217;ll need to re-run the patch version which lines up with your FE patch levels before the FE services will be able to start.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/ocs-create-pool-wizard-error-invalid-database-parameter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OCS Create Pool Step Failure Drops Conference Directories</title>
		<link>http://www.confusedamused.com/notebook/ocs-create-pool-step-failure-drops-conference-directories/</link>
		<comments>http://www.confusedamused.com/notebook/ocs-create-pool-step-failure-drops-conference-directories/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 21:41:03 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Office Communications Server 2007 R2]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[dbimexp]]></category>
		<category><![CDATA[OCS]]></category>
		<category><![CDATA[pstn]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=980</guid>
		<description><![CDATA[Something to keep in mind before you ever move an OCS database is that you&#8217;ll want to grab backups of the user data and conference directories so that you can restore the data just in case anything goes wrong with your move operation. The conference directory objects map conference IDs and passcodes used by PSTN [...]]]></description>
			<content:encoded><![CDATA[<p>Something to keep in mind before you ever move an OCS database is that you&#8217;ll want to grab backups of the user data and conference directories so that you can restore the data just in case anything goes wrong with your move operation. The conference directory objects map conference IDs and passcodes used by PSTN dial-in users to a specific Live Meeting instance. These objects are stored in Active Directory and not in the OCS back-end database like you might expect, but you can still back up all the data these objects hold.</p>

<p>You can export all user data and conference directories with the following command:</p>

<p><pre><code>dbimpexp.exe /hrxmlfile:everything.xml /sqlserver:SQL.ptown.local\OCS</code></pre></p>

<p>I usually also grab a separate backup of just the conference directories from the pool:</p>

<p><pre><code>dbimpexp.exe /hrxmlfile:confdirs.xml /sqlserver:SQL.ptown.local\OCS /restype:confdir</code></pre></p>

<p>After these run successfully you can copy these files off to a safe place and then proceed with your database operations. </p>

<p>As you are moving the databases around one of the steps on Technet will have you re-run the Create Pool wizard, but if this step fails for any reason the installer will kick into its rollback mode and remove any configuration changes it made. What&#8217;s not terribly apparent is that part of <b>this rollback process removes all conference directories on the pool without any warning.</b> </p>

<p>So say this step fails on something silly like a file share permission you&#8217;ll suddenly find you dropped all your conference directories. The end result of that is users calling in to meetings via PSTN will no longer be able to enter conference ID and passcode to join the meetings hosted on that pool. </p>

<p>I recently ran a DB move and the user account we used did not explicityly have Full Access rights to one of the OCS file shares (it had been removed at some point for an unknown reason), but the result was the Create Pool operation kicked into rollback mode and removed the pool&#8217;s conference directories. We had a solid backup of these to restore from, but this customer had previously lost the directory the first time they tried this operation on their own because of the same problem.</p>

<p>If the directories are dropped and you don&#8217;t have a backup via DBImpExp.exe you&#8217;ll need to recreate the conference directories on the admin side, but the big pain point is that all users will need to reschedule their meetings (because the previous ID/Passcode mappings are no longer valid). It&#8217;s a really ugly user experience and likely to not go over very well. If only you had backed these up in advance!</p>

<p>I would imagine you could restore the conference directory object stored in AD and possibly get that hooked back up to OCS, but your best bet is really to be using DbImpExp.exe instead. A general best practice for any OCS environment is to be taking regular backups of your OCS data and conference directories via DbImpExp.exe so that way you&#8217;ll never find yourself in this situation.</p>

<p>If your Create Pool step does fail at least one time you&#8217;ll need to restore the directories because they&#8217;ve been dumped. After you work out the Create Pool step issue and succeed in starting up your Front-End services  you can proceed with the conference diretory restore.</p>

<p>The syntax to restore just the conference directories from the pool is:</p>

<p><pre><code>dbimpexp.exe /import /hrxmlfile:confdirs.xml /sqlserver:SQL.ptown.local\OCS /restype:confdir</code></pre></p>

<p>After running this you should be able to dial in via PSTN and enter a conference ID and passcode from a pre-existing meeting again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/ocs-create-pool-step-failure-drops-conference-directories/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving Custom OCS Dial-in Access Number Contacts to Lync</title>
		<link>http://www.confusedamused.com/notebook/moving-custom-ocs-dial-in-access-number-contacts-to-lync/</link>
		<comments>http://www.confusedamused.com/notebook/moving-custom-ocs-dial-in-access-number-contacts-to-lync/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 21:59:46 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Lync Server 2010]]></category>
		<category><![CDATA[contact]]></category>
		<category><![CDATA[dial-in]]></category>
		<category><![CDATA[lync]]></category>
		<category><![CDATA[OCS]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=946</guid>
		<description><![CDATA[This was interesting case I thought I&#8217;d share &#8211; in OCS 2007 R2 when you created a dial-in access number you were presented with this screen: 



If you accepted the default configuration and SIP URI (a random GUID), the SIP enabled contact representing this dial-in access number would be stored within Active Directory in the [...]]]></description>
			<content:encoded><![CDATA[<p>This was interesting case I thought I&#8217;d share &#8211; in OCS 2007 R2 when you created a dial-in access number you were presented with this screen: </p>

<p><a href="http://www.confusedamused.com/wp-content/pictures/2011/03/attendant.png"><img src="http://www.confusedamused.com/wp-content/pictures/2011/03/attendant.png" alt="" title="attendant" width="381" height="223" class="alignnone size-full wp-image-943" /></a></p>

<p>If you accepted the default configuration and SIP URI (a random GUID), the SIP enabled contact representing this dial-in access number would be stored within Active Directory in the Configuration context. Specifically, it would be placed in CN=Application Contacts,CN=RTC Service,CN=Services,CN=Configuration,DC=ptown,DC=local.</p>

<p>Or, if you pressed the Advanced button you could specify an existing contact object to associate with the dial-in number. This allowed you to create contacts in advance which would represent these numbers. This process worked just fine in OCS and really had no negative impact. </p>

<p><a href="http://www.confusedamused.com/wp-content/pictures/2011/03/custom-e1301608307565.png"><img src="http://www.confusedamused.com/wp-content/pictures/2011/03/custom-e1301608307565.png" alt="" title="custom" width="500" height="166" class="alignnone size-full wp-image-944" /></a></p>

<p>However, when you go to move these custom contact objects to Lync as part of your migration process you’ll find Lync doesn’t really “see” these objects. If you run Get-CsApplicationEndpoint you should notice that Lync will only return objects within the Application Contacts container mentioned previously. Any SIP-enabled contact objects outside of this location are not returned. </p>

<p>As an added bonus you can actually find (and move!) these objects by specifying their entire DN when running Get-CsApplicationEndpoint. But after successfully moving these endpoints you’ll notice they still do not appear as a dial-in number in Lync. So even though the contact is now homed to the Lync pool, the server still only considers objects in the Application Contacts container a valid dial-in access contact and these numbers don&#8217;t go out on meeting invites. </p>

<p>In order to get these numbers fully moved to Lync you’ll need to do the following:</p>

<ol>
<li>Leave the contact object homed to the OCS pool</li>
<li>Disable the contact for OCS </li>
<li>Recreate the dial-in access number within Lync</li>
</ol>

<p>Also, be sure to pay attention to the migration docs and only perform these steps after <i>all</i> users are moved to the Lync pool. If you disable the OCS contact before that point any new meeting invitations created by a user on the OCS pool won’t have the deleted dial-in number available.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/moving-custom-ocs-dial-in-access-number-contacts-to-lync/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lync Dial-In Conferencing Static Route Configuration</title>
		<link>http://www.confusedamused.com/notebook/lync-dial-in-conferencing-static-route-configuration/</link>
		<comments>http://www.confusedamused.com/notebook/lync-dial-in-conferencing-static-route-configuration/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 15:55:03 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Lync Server 2010]]></category>
		<category><![CDATA[dial-in]]></category>
		<category><![CDATA[lync]]></category>
		<category><![CDATA[OCS]]></category>
		<category><![CDATA[pstn]]></category>
		<category><![CDATA[route]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=787</guid>
		<description><![CDATA[Something I haven&#8217;t seen documented with Lync Server 2010 so far is the dial-in conferencing configuration required to enable outbound dialing. This allows non-Enteprise Voice Lync, Lync Web App, or Lync Attendee users to join the conference by having the conferencing service call outbound to them as opposed to them manually dialing in to the [...]]]></description>
			<content:encoded><![CDATA[<p>Something I haven&#8217;t seen documented with Lync Server 2010 so far is the dial-in conferencing configuration required to enable outbound dialing. This allows non-Enteprise Voice Lync, Lync Web App, or Lync Attendee users to join the conference by having the conferencing service call <i>outbound</i> to them as opposed to them manually dialing in to the conference and entering conference ID and passcodes.</p>

<p><p>In OCS 2007 R2 this was accomplished by <a href="http://technet.microsoft.com/en-us/library/dd425101(office.13).aspx">adding a static route</a> from the Front-End pool to a Mediation server for phone URI requests. The concept in Lync is the same, but there is a slight difference in ports used because the Mediation service in Lync now listens on Port 5070 for server-to-server traffic as opposed to 5061 in OCS 2007 R2. The route configuration also varies a bit. In the example below I have a Mediation server role collocated with my Front-End pool, fepool.confusedamused.com.</p>
<p>As <a href="http://mikestacy.typepad.com/mike-stacys-blog/2010/09/creating-static-routes-in-lync-server-2010.html">Mike Stacy</a> has already pointed out, the GUI for configuring static routes is now gone and must be done through the Lync Management Shell.  To get started, we need to create the route statement and store it in a temporary variable. Replace the destination with your Mediation server pool FQDN and the matching URI with your own SIP domain:</p>
<pre><code>$route = New-CsStaticRoute -Destination "fepool.ptown.local" -Port 5070 -MatchUri "confusedamused.com" -MatchOnlyPhoneUri $true -TLSRoute -UseDefaultCertificate $true -ReplaceHostInRequestUri $true</code></pre>
<p>Then, we can assign the route to the global configuration:</p>
<pre><code>Set-CsStaticRoutingConfiguration Global -Route @{Add=$route}</code></pre>
<p>You should see the Front-End pick up this change within 5 minutes (another nice change over OCS 2007 R2) with an event log entry:</p>
<p><a href="http://www.confusedamused.com/wp-content/pictures/2010/11/routing.jpg"><img src="http://www.confusedamused.com/wp-content/pictures/2010/11/routing.jpg" alt="" title="routing" width="435" height="160" class="alignnone size-full wp-image-790" /></a></p>
<p>The observant folks here who have configured this in OCS 2007 R2 might have noticed the Replace host in request URI option wasn&#8217;t necessary back then. What I&#8217;ve found is that not selecting this option in Lync causes the calls to fail for non-Enterprise  voice users. The SIP invite that gets sent to a Mediation server will typically look like this for an outbound call when the Replace host in request URI option is not selected:</p>
<blockquote>
<b>INVITE sip:+12223334444@confusedamused.com;user=phone SIP/2.0</b><br />
<b>FROM</b>: &lt;sip:eddie@confusedamused.com;gruu;opaque=app:conf:audio-video:id:GJ5CPPSK&gt;;epid=C68D6F45DA;tag=7ee8ecfbea<br />
<b>TO</b>: &lt;sip:+12223334444@confusedamused.com;user=phone&gt;
</blockquote>
<p>This request will actually fail and you&#8217;ll see a SIP 488 Not acceptable here error message, followed by a SIP 503 Service unavailable error on the Mediation server. If you look at the trace you&#8217;ll find the following detailed error:</p>
<blockquote>
<b>ms-diagnostics-public</b>: 10025;reason=&#8221;Gateway peer in outbound call is not found in topology document&#8221;;component=&#8221;MediationServer&#8221;
</blockquote>
<p>What this boils down to is the call won&#8217;t route because the host the INVITE is addressed to (@confusedamused.com) isn&#8217;t actually part of the topology. If the Replace host in request URI option is selected, the SIP INVITE sent to the Mediation server replaces the @confusedamused.com with the actual destination in our route, @fepool.ptown.local, as seen below. Notice the difference in the first line, where the Mediation pool name has now replaced the previous host of just confusedamused.com. This call will be successful:</p>
<blockquote>
<b>INVITE sip:+12223334444@fepool.ptown.local;user=phone SIP/2.0</b><br />
<b>FROM</b>: &lt;sip:eddie@confusedamused.com;gruu;opaque=app:conf:audio-video:id:F0GS16HB&gt;;epid=BFDBD3B7B8;tag=42bd8c5b8<br />
<b>TO</b>: &lt;sip:+12223334444@confusedamused.com;user=phone&gt;
</blockquote>
<p>I&#8217;ll throw out a disclaimer that the officially documented process may be different and that I may have to update this later, but I wanted to at least share what I&#8217;ve got working so far.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/lync-dial-in-conferencing-static-route-configuration/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Outlook Integration Error in Communicator 2007 R2 when Exchange System Manager is installed</title>
		<link>http://www.confusedamused.com/notebook/outlook-integration-error-in-communicator-2007-r2-when-exchange-system-manager-is-installed/</link>
		<comments>http://www.confusedamused.com/notebook/outlook-integration-error-in-communicator-2007-r2-when-exchange-system-manager-is-installed/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 18:59:33 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Office Communications Server 2007 R2]]></category>
		<category><![CDATA[2007]]></category>
		<category><![CDATA[communicator]]></category>
		<category><![CDATA[exchange]]></category>
		<category><![CDATA[mapi]]></category>
		<category><![CDATA[OCS]]></category>
		<category><![CDATA[R2]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=776</guid>
		<description><![CDATA[Working on an OCS migration project a few weeks ago I ran into everyone&#8217;s favorite error:

There was a problem connecting to Microsoft Office Outlook. Your Outlook profile is not configured correctly. Contact your system administrator with the information.

After double checking the lengthy KB 2373585 article discussing Outlook/Communicator errors and ruling out the usual suspects I [...]]]></description>
			<content:encoded><![CDATA[<p>Working on an OCS migration project a few weeks ago I ran into everyone&#8217;s favorite error:</p>

<p><blockquote>There was a problem connecting to Microsoft Office Outlook. Your Outlook profile is not configured correctly. Contact your system administrator with the information.</blockquote></p>

<p>After double checking the lengthy <a href="http://support.microsoft.com/kb/2373585">KB 2373585 article</a> discussing Outlook/Communicator errors and ruling out the usual suspects I was stumped. After some digging around on the workstation I found the user had the Exchange 2003 System Manager and tools installed on the machine. Since the System Manager uses a slightly different version of MAPI components Communicator would generate this error immediately upon signing in.</p>

<p>The solution is to open a command prompt and just run the command: <b>fixmapi</b>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/outlook-integration-error-in-communicator-2007-r2-when-exchange-system-manager-is-installed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OCS 2007 R2 Cumulative Update 6 and Stored Procedure Mismatches</title>
		<link>http://www.confusedamused.com/notebook/ocs-2007-r2-cumulative-update-6-and-stored-procedure-mismatches/</link>
		<comments>http://www.confusedamused.com/notebook/ocs-2007-r2-cumulative-update-6-and-stored-procedure-mismatches/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 03:03:12 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Office Communications Server 2007 R2]]></category>
		<category><![CDATA[2007]]></category>
		<category><![CDATA[cu6]]></category>
		<category><![CDATA[cumulative]]></category>
		<category><![CDATA[LCS]]></category>
		<category><![CDATA[OCS]]></category>
		<category><![CDATA[R2]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=762</guid>
		<description><![CDATA[Something not mentioned in the release notes of Cumulative Update (CU6) is that there is a dependency on running the new OCS2009-DBUpgrade.msi before any server updates.  If you try to run the ServerUpdateInstaller.exe and apply the server updates without first running the database package you may see an error like this:


Event ID: 30968
Source: Live [...]]]></description>
			<content:encoded><![CDATA[<p>Something not mentioned in the release notes of Cumulative Update (CU6) is that there is a dependency on running the new OCS2009-DBUpgrade.msi <em>before</em> any server updates.  If you try to run the ServerUpdateInstaller.exe and apply the server updates without first running the database package you may see an error like this:</p>

<blockquote>
<b>Event ID</b>: 30968<br />
<b>Source</b>: Live Communications User Services<br />
<b>Details</b>: The component Live Communications User Services reported a critical error: code C3EE78F8 (Enterprise Edition Server successfully registered with the back-end, but a stored procedure version mismatch was detected. The service will not start until this problem is resolved. Cause: The database schema and the Enterprise Edition Server were updated by different installation packages. Resolution: Ensure both the Enterprise Edition Server and back-end were installed or modified by the same installation package. The service has to stop.
</blockquote>

<p>Obviously the error verbiage is a bit outdated with references to LCS, but the error is correct &#8211; there is a mismatch between the stored procedure versions which makes the Front-End service to fail to start.</p>

<p>To avoid the issue be sure to apply the latest OCS2009-DBUpgrade.msi package <em>before </em>updating any Front-End servers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/ocs-2007-r2-cumulative-update-6-and-stored-procedure-mismatches/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Your OCS A/V Authentication Certificate Subject Name Doesn&#8217;t Matter</title>
		<link>http://www.confusedamused.com/notebook/your-ocs-av-authentication-certificate-subject-name-doesnt-matter/</link>
		<comments>http://www.confusedamused.com/notebook/your-ocs-av-authentication-certificate-subject-name-doesnt-matter/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 02:31:55 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Office Communications Server 2007]]></category>
		<category><![CDATA[Office Communications Server 2007 R2]]></category>
		<category><![CDATA[av]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[edge]]></category>
		<category><![CDATA[mtls]]></category>
		<category><![CDATA[OCS]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=722</guid>
		<description><![CDATA[A few months back I was involved in a discussion about what the subject name of an OCS Edge Server&#8217;s A/V authentication certificate should be. Some folks were saying to use the Edge server&#8217;s internal FQDN and others were saying to use the external, public FQDN you define for A/V. I was in the camp [...]]]></description>
			<content:encoded><![CDATA[<p><p>A few months back I was involved in a discussion about what the subject name of an OCS Edge Server&#8217;s A/V authentication certificate should be. Some folks were saying to use the Edge server&#8217;s internal FQDN and others were saying to use the external, public FQDN you define for A/V. I was in the camp using the external name, but the odd thing was both sides said their approach worked. There is definitely some confusion about what name you should use and Microsoft has actually published directly conflicting information which further confuses the issue. Some testing I&#8217;ve recently done clears up <i>why</i> so many documents and people contradict each other &#8211; <b>the subject name doesn&#8217;t matter</b>. Really. You could put whatever you want in that subject name, assign it to A/V authentication and it will work flawlessly. The purpose of this certificate per the Technet documentation: </p>  <blockquote>The private key of the A/V authentication certificate is used to generate authentication credentials. </blockquote>  <p>Specifically, it&#8217;s not used for encryption or MTLS even if that&#8217;s not made clear anywhere. Let&#8217;s take a step back and clarify a few things for some background:</p>  <ul>   <li>There are two services that run on the Edge server with &quot;A/V&quot; in the name. If you’re not familiar with the difference, Jeff Schertz’s <a href="http://blogs.pointbridge.com/Blogs/schertz_jeff/Pages/Post.aspx?_ID=79">More on OCS Edge Server Certificates</a> article has a good explanation for some background on what the difference is between the A/V Authentication and A/V Edge services, but basically &#8211; the A/V Authentication service is internal facing and A/V Edge Service is external facing. </li>    <li>There is no certificate assigned to the A/V Edge service because encryption for external A/V traffic is provided by SRTP. </li>    <li>The certificate for A/V Authentication is only used by internal clients when trying to communicate with an external or federated client. This means you can (and should) use an internal certificate authority to issue this certificate. There is no benefit or need to use a public certificate for A/V authentication. </li> </ul>  <p>Let&#8217;s walk through a little example here as if I was trying to figure out what name to use for my A/V authentication certificate. I have the following environment:</p>  <ul>   <li>Public Domain: confusedamused.com </li>    <li>Internal AD Domain: ptown.local </li>    <li>SIP Domain: confusedamused.com </li>    <li>Edge Server Internal FQDN: edge.ptown.local </li>    <li>A/V Edge Service FQDN: av.confusedamused.com </li> </ul>  <p>So with that information what should I use as the certificate name for the A/V authentication certificate? If you consult the Technet documentation topic <a href=" http://technet.microsoft.com/en-us/library/dd425147(office.13).aspx">Set up Certificates for A/V Authentication</a> you’ll find this note (emphasis is mine): </p>  <blockquote>The subject name should match the fully qualified domain name (FQDN) of the <i>A/V Edge Service</i> published by the <i>external</i> firewall, or the FQDN of the VIP used by the A/V Edge Service array on the <i>external</i> load balancer (that is, if the Edge Servers are load balanced). </blockquote>  <p>So based on that blurb, my A/V authentication certificate subject name should be av.confusedamused.com. Fair enough.</p>  <p>I ran through the <a href="http://www.microsoft.com/Downloads/details.aspx?familyid=EC4B960C-3FE2-41BD-ABDF-AE89CFCB8C6C&amp;displaylang=en">OCS 2007 R2 Edge Planning Tool</a> for a sanity check. You can see the result below, but the tool follows the Technet documentation and uses the external FQDN I defined for the A/V Edge Service when it asked. </p>  <p><a href="http://www.confusedamused.com/wp-content/pictures/2010/02/toolav.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tool-av" border="0" alt="tool-av" src="http://www.confusedamused.com/wp-content/pictures/2010/02/toolav_thumb.png" width="600" height="402" /></a><br /><a href="http://www.confusedamused.com/wp-content/pictures/2010/02/toolresults.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="tool-results" border="0" alt="tool-results" src="http://www.confusedamused.com/wp-content/pictures/2010/02/toolresults_thumb.png" width="600" height="402" /></a> </p>  <p>A group of MVPs and Microsoft employees published a document called <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=e9f86f96-aa09-4dca-9088-f64b4f01c703">Deploying Certificates in Office Communications Server 2007</a> which says the following about the A/V authentication certificate (emphasis is mine again): </p>  <blockquote>Must be the FQDN of Audio/Video <i>authentication server</i> in DNS.</blockquote>  <p>Well that calls out the name of the authentication server, not the A/V Edge Service. I think this comes down to really just poor wording in the document which contributes to confusion, but what is the name of our A/V Authentication server? It would be the same name as the internal Edge interface, right? The A/V Authentication server is the Edge server, not the external FQDN. So now we&#8217;re being told to use the internal FQDN, edge.ptown.local as the subject name.</p>  <p>Also released by Microsoft was a document called <a href=" http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=e9f86f96-aa09-4dca-9088-f64b4f01c703&amp;displaylang=en ">OCS 2007 R2 Walkthrough &#8211; Scale to Load Balanced Edge Server</a> which completely contradicts Technet and the Edge Planning Tool (emphasis mine):</p>  <blockquote>   <ul>     <li>Access Edge Internal (Corporate Certificate). In our sample topology, the subject name would be set to ocsedge.contoso.com, the FQDN of the Edge Server internal interface. </li>      <li><i>A/V Authentication Internal</i> (Corporate Certificate). In our sample topology, the subject name would be set to ocsedge.contoso.com, the <i>FQDN of the Edge Server internal interface.</i> </li>   </ul> </blockquote>  <p>This seems to match up with the certificates document and is somewhat backed by the exact same Technet article I referenced earlier which says:</p>  <blockquote>As a security precaution, you should not use the same certificate for A/V authentication that you use for the internal interface of the Edge Server.</blockquote>  <p>This begs the question &quot;Why would I ever even <i>try</i> to use the same certificate?&quot; The only logical reason would be perhaps because they use the same subject name. That jives with the Scale to a Load Balanced Edge Server documentation. If we&#8217;re thinking about this in terms of MTLS connections, you would have to think that this makes the most sense. In your OCS Forest properties if you added an A/V Edge server with the name edge.ptown.local for port 5062, it&#8217;s reasonable that you&#8217;d expect the A/V Authentication service operating on port 5062 of the internal interface to offer a certificate matching this name. If it presented something wrong, say maybe the external FQDN of the A/V Edge service it should fail, right?</p>  <p>Well, the truth is the name doesn&#8217;t matter. There isn&#8217;t MTLS validation happening on port 5062 the same way you&#8217;d expect MTLS between servers on 5061. I think the reason the certificate requirement issue hasn&#8217;t been pointed out yet is because it&#8217;s never caused a problem &#8211; it works either way. I can use a certificate with a subject name gobblygook.confusedamused.com and media relay authentication through the Edge server works just fine. It just needs <i>a</i> certificate to generate authentication credentials for the media relay process. Go ahead and try it out &#8211; put whatever name you want on the certificate and it will still work.</p>  <p>So while the subject name doesn&#8217;t really matter, if you&#8217;re still interested in adhering to best practices I would recommend using the external facing, public A/V Edge name. In the example earlier this would be av.confusedamused.com. Hopefully Microsoft will update the certificate and scaling documents with a clarification and make them more consistent with the rest of Technet.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/your-ocs-av-authentication-certificate-subject-name-doesnt-matter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Blackberry Enterprise Server Express &amp; OCS</title>
		<link>http://www.confusedamused.com/notebook/blackberry-enterprise-server-express-ocs/</link>
		<comments>http://www.confusedamused.com/notebook/blackberry-enterprise-server-express-ocs/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 17:05:51 +0000</pubDate>
		<dc:creator>Tom Pacyk</dc:creator>
				<category><![CDATA[Blackberry Enterprise Server Express]]></category>
		<category><![CDATA[Office Communications Server 2007]]></category>
		<category><![CDATA[Office Communications Server 2007 R2]]></category>
		<category><![CDATA[bes]]></category>
		<category><![CDATA[im]]></category>
		<category><![CDATA[OCS]]></category>

		<guid isPermaLink="false">http://www.confusedamused.com/?p=702</guid>
		<description><![CDATA[While this probably meets the needs of most places (up to 2000 Blackberry email users) if you take a look at the comparison chart you’ll find this freebie version does not support instant messaging for OCS. Bummer.
]]></description>
			<content:encoded><![CDATA[<p>While this probably meets the needs of most places (up to 2000 Blackberry email users) if you take a look at the <a href="http://na.blackberry.com/eng/services/business/server/express/ComparisonChart_NA_012110.pdf" target="_blank">comparison chart</a> you’ll find this freebie version does not support instant messaging for OCS. Bummer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.confusedamused.com/notebook/blackberry-enterprise-server-express-ocs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

