<?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>Elan Shudnow's Blog &#187; Elan Shudnow</title>
	<atom:link href="http://www.shudnow.net/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.shudnow.net</link>
	<description>Just another IT guy!</description>
	<lastBuildDate>Fri, 30 Jul 2010 18:19:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Exchange 2010 Database Activation Coordination (DAC)</title>
		<link>http://www.shudnow.net/2010/06/30/exchange-2010-database-activation-coordination-dac/</link>
		<comments>http://www.shudnow.net/2010/06/30/exchange-2010-database-activation-coordination-dac/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 01:58:51 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Exchange 2010]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1819</guid>
		<description><![CDATA[Introduction and Database Activation Coordination (DAC) Support Exchange 2010 introduced a vast amount of changes to the High Availability model with the addition of the Database Availability Group (DAG).  Some features of the DAG are having up to 16 members, automatic database *over to another site as long as you still have quorum, and much [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction and Database Activation Coordination (DAC) Support</h3>
<p>Exchange 2010 introduced a vast amount of changes to the High Availability model with the addition of the Database Availability Group (DAG).  Some features of the DAG are having up to 16 members, automatic database *over to another site as long as you still have quorum, and much more.  Exchange also introduced Database Activation Coordination (DAC) mode as an optional addition to the new High Availability model to prevent split brain syndrome from occurring during a site failover when utilizing a multi-site DAG configuration with at least 3 DAG members and more than one Active Directory Site.  DAC is off by default and in Exchange 2010 RTM it should not be enabled for:</p>
<ul>
<li>2 member DAGs</li>
<li>Non-Multisite DAGs</li>
<li>Multi-site DAGs that are in the same stretched Active Directory Site</li>
</ul>
<p>In Exchange 2010 SP1,  the following changes are introduced and supported for DAC:</p>
<ul>
<li>DAGs that contain 2 or more members</li>
<li>DAGs that are stretched across a single AD Site</li>
</ul>
<h3>Majority Node Set</h3>
<p>Before we understand how DAC works, we really have to understand the Cluster Model that DAGs utilize.  Both Exchange 2007 and Exchange 2010 Clusters use Majority Node Set  Clustering (MNS).  This means that 50% of your votes (server votes and/or 1  file share witness) need to be up and running.  The proper formula for this is (n / 2) + 1 where n is the number of DAG nodes within the DAG. With DAGs, if you have  an odd number of DAG nodes in the same DAG (Cluster), you have an odd  number of votes so you don’t have a witness.  If you have an even number  of DAGs nodes, you will have a file share witness in case half of your  nodes go down, you have a witness who will act as that extra +1 number.</p>
<p>So let&#8217;s go through an example.  Let&#8217;s say we have 3 servers. This means that we need (number of nodes which is 3 / 2) + 1  which equals 2 as you round down since you can&#8217;t have half a server/witness.  This means that at any given time, we need 2 of our nodes to be online which means we can sustain only 1 (either a server or a file share witness) failure in our DAG.  Now let&#8217;s say we have 4 servers.  This means that we need (number of nodes which is 4 / 2) + 1 which equals 3.  This means at any given time, we need 3 of our servers/witness to be online which means we can sustain 2 server failures or 1 server failure and 1 witness failure.</p>
<h3>Database Activation Coordination (DAC)</h3>
<p>In short, DAC mode is enabled when you have at least 3 members to prevent split brain syndrome.  It&#8217;s as simple as that. Let&#8217;s take a look at an example and see how DAC can help. The longer explanation below talks about this specific model.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/Exchange2010SP1DAC.jpg" alt="" width="539" height="461" /></p>
<h4>Prevention of Split Brain Syndrome</h4>
<p><strong>Short Explanation</strong></p>
<p>When the Primary Site goes offline (or we lose too many servers &#8211; refer to Majority Node Set above), the Secondary Site will need to be manually activated should you make the choice that a secondary site activation will be required depending on the magnitude of the failure and how long you anticipate the primary site or servers there will be down.  But, when the Primary Site comes back online, the WAN link may be offline.  Because the Primary Site&#8217;s Exchange Servers don&#8217;t necessarily know about the Manual Site Switchover, they will come up thinking they have Quorum since the Primary Site has the majority of the servers and they are still connected to the old FSW.  Because of this, they will begin to mount databases since to them, they still have Quorum.</p>
<p>DAC mode will enable the usage of a new protocol, Database Activation Coordination Protocol (DACP). This means that DAG members start up with a special memory bit of 0.  They need to contact another DAG node with this special memory bit set to 1.  This memory bit will be set to 1 on one of the DAG members in the Secondary Site since that site is hosting active databases.  Because the WAN link is down, the Primary Site&#8217;s DAG members that just came online won&#8217;t be able to contact this DAG member with the special memory bit set to 1.  Because of this, they won&#8217;t be able to mount databases.  The WAN link will have to come back online which means the Primary Site&#8217;s DAG members will now be able to contact the DAG member that has the special memory bit set to 1 which will now allow the Primary Site&#8217;s DAG Members to be in a state where they are allowed to mount databases.</p>
<p><strong>Longer Explanation</strong></p>
<p>We can see in this example, there are 5 DAG nodes and no FSW as we have an odd number of DAG nodes.  Our entire Primary Datacenter Fails (or we lose too many servers &#8211; in our case, this would be (5 / 2) + 1 which means 3 of our nodes need to remain operational for the DAG to remain operational), the  Secondary Site will need to be manually activated should you make the  choice that a secondary site activation will be required depending on  the magnitude of the failure and how long you anticipate the primary  site or servers there will be down.</p>
<p>Part of the failover process will have us shrink the DAG by removing the DAG nodes in the Primary Site from the cluster so all that remain of the existing 2 DAG nodes in the Secondary Site.  Instructions for shrinking the DAG and doing a manual site actiavtion is located <a href="http://technet.microsoft.com/en-us/library/dd351049.aspx">here</a>.  Should we decide to proceed with a a manual site switchover , we will provision the FSW in the secondary site during manual site activation to the secondary datacenter.  But what happens if the Primary Site&#8217;s Exchange Servers come back online?  They will think they have majority because the primary site has the majority of the servers and the FSW is located there.  Because of this, when they start up, they will begin mounting databases.</p>
<p>Now this is where DAC comes in.  Without DAC enabled, the Primary Site&#8217;s Exchange Servers would indeed come online, think they have majority, and begin mounting databases and you run into a split-brain syndrome scenario.  This is because when power is restored to the datacenter, the servers will usually come up before WAN connectivity is fully restored.  The servers cannot communicate with each other between the sites to see that the active databases are already mounted, and because of that, the Primary Exchange Servers will see they have majority since the majority of your servers and your FSW should be in the Primary Site, and mount the databases.</p>
<p>If the servers were allowed to mount databases, and you ran into a split-brain scenario, something called Database Divergence would occur. Database Divergence is where the databases in the primary site would  become different from the secondary site causing  the need for a reseed  from the authority database which would cause some database loss from  the new database that went into the diverged database due to split-brain  from occurring.</p>
<p>The way DAC works, is that all servers have a new protocol known as Database Activation Coordination Protocol (DACP).  One of the DAG Nodes will always have a special memory bit set to 1. What this means is, with DAC on, any time a server wants to mount a database, it will have to find a server with the DAC memory bit set to 1.  Because of this, when the Primary DAG Servers come back online, they will need to contact a server with that memory bit set to 1 in order to be in a state where it can begin mounting databases.  Because the WAN is down, these Primary Datacenter DAG Servers that are now just coming back online won&#8217;t be able to mount databases because none of these servers will have that special memory bit set to 1.  That memory bit will be set on one of the DAG Servers in the Secondary Site. Once WAN connectivity is restored, these Primary Datacenter DAG Servers will now be able to communicate with the DAG Server that happens to have that special memory bit set to 1 and now these DAG Servers will be allowed to mount databases.</p>
<p>Thankfully, in SP1, DAC will work with  2 node DAGs and multi-site DAGs that are using a stretched AD Site.</p>
<h4>DAC and ForceQuorum</h4>
<p>If you do not know what Forcequorum is,  have a quick look at my blog post <a href="http://www.shudnow.net/2008/11/06/recovering-from-server-2008-ccr-cluster-failure-with-forcequorum/">here</a>. Essentially, forcequorum allows you to forcefully start a cluster when this cluster has lost quorum.  You&#8217;re forcing it to bypass the Majority Node Set requirement to become operational.  In CCR, forcequorum was used in a geographically dispersed CCR cluster.  When the Primary Site went offline, you had to run forcequorum on the node in the Secondary Site and then set a new File Share Witness.  This is similar in Exchange 2010 DAGs when the Primary Site goes offline.</p>
<p>The article <a href="http://technet.microsoft.com/en-us/library/dd351049.aspx">here </a>is entitled Datacenter Switchovers and is the article to use when planning Site Resiliency with Exchange 2010.  You can see, in the procedure for terminating a failed site, there are two methods:</p>
<ul>
<li>When the DAG is in DAC  mode:</li>
<li>When the DAG isn&#8217;t in DAC mode</li>
</ul>
<p>When looking at the procedures for when DAC is NOT enabled, there are more steps that have to be done which involve running clussvc commands.  When looking at the procedures for when DAC is enabled, there are no steps which involve running clussv commands.  This is because when you have DAC mode on, DAC takes care of all the clussvc procedures for you in the background. As you can see, it is well worth it to ensure you have at least 3 DAG nodes in a DAG just to utilize DAC.  But again, in Exchange 2010 SP1, DAC can be utilized with DAGs that contain two nodes.</p>
<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1819&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/06/30/exchange-2010-database-activation-coordination-dac/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Exchange Unified Messaging Provisioning Scripts</title>
		<link>http://www.shudnow.net/2010/06/13/exchange-unified-messaging-provisioning-scripts/</link>
		<comments>http://www.shudnow.net/2010/06/13/exchange-unified-messaging-provisioning-scripts/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 16:08:21 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Exchange 2010]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1795</guid>
		<description><![CDATA[I recently wrote a Unified Messaging Provisioning Script and am providing it in two flavors; a simple version of it and the complex version of it. Simple Script Features (CSV Download) $DefaultPIN is exactly that.  The CSV has a PIN column which is empty by default.  If this CSV field is left blank for a [...]]]></description>
			<content:encoded><![CDATA[<p>I recently wrote a Unified Messaging Provisioning Script and am providing it in two flavors; a simple version of it and the complex version of it.</p>
<h3>Simple Script Features (<a href="http://www.shudnow.net/files/UMsimple.csv">CSV Download</a>)</h3>
<ol>
<li>$DefaultPIN is exactly that.  The CSV has a PIN column which is empty by default.  If this CSV field is left blank for a given user, it will use the $DefaultPIN.  Otherwise, it will use the PIN specified in the script.</li>
<li>The Script will search for non-legacy Mailboxes (non-Exchange 2000/2003 Mailboxes if running Exchange 2007) and use the First and Last column (for the user&#8217;s first name and last name)  in Excel.  Because Firstname and Lastname is not unique in AD, the script will error on a user if they have multiple mailboxes.  It will tell you to enter the user&#8217;s Alias in that user&#8217;s Alias column in Excel.  The script will then get the mailbox that has that Alias.  This doesn&#8217;t just rely on Get-Mailbox -identity alias because that can still return multiple mailboxes.  It does a Get-Mailbox -identity alias but also does a Where-Object {$_.alias -eq $Mailbox.Alias} to ensure we use the correct mailbox.</li>
<li>The script will enable the user&#8217;s UM Mailbox based on the Mailbox GUID on the mailbox that is retrieved to ensure enable the correct Mailbox based on the unique (GUID) identifier.</li>
<li>Allows you to set the personal operator extension of a user based on the information in the CSV.  If you don&#8217;t need to set the Operator Extension, just go into the script and remove the Set-UMMailbox line as everything else is contained in the Enable-UMMailbox line.</li>
<li>The script assumes you have one UM Mailbox Policy and uses that to assign users to.</li>
</ol>
<h3>Complex Script Features (<a href="http://www.shudnow.net/files/UMcomplex.csv">CSV Download</a>)</h3>
<ol>
<li>Includes all the features of the Simple Script plus the following:</li>
<li>Doesn&#8217;t send the default SMTP Message to user&#8217;s when they are UM Enabled.  The variable $NotifyEmail is where you want the welcome message sent which should obviously be a mailbox you perhaps create for the purpose of sending welcome messages to.</li>
<li>Instead of sending the welcome message to the user&#8217;s mailbox when they are UM Enabled, the variable $smtpFrom is where you want a custom html formatted welcome  message sent from.  This could be something such as  ExchangeUMWelcome@domain.com.</li>
<li>To tweak the custom HTML Formatted message, go down to the variable  $EmailBody and include your own HTML.  By default, it will sent the user their PIN (if $DefaultPIN is used, that is sent to the user and if there&#8217;s a PIN for that user in the CSV, it uses that instead), their Extension, and their Subscriber Access Number as defined in the CSV.</li>
<li>The script will allow you to choose from two separate UM Mailbox Policies.  By default, the script uses North America and London.  If you have different UM Mailbox Policies which you most likely will, you will need to go down to the Enable-UMMailbox command to tweak the name of the Policies that are used.  If you want to add more, you will need to modify the Write-Host lines near the beginning of the script which gives the user the option what to select and then go down to the Enable-UMMailbox and tweak the elseif pieces to take into consideration the additional UM Mailbox Policies to consider.</li>
</ol>
<p><strong>Note</strong>: The CSV file used for the Complex Script is available for download from here.  The one difference between this and the simple version of the CSV is this CSV contains a SubscriberAccess column which the HTML message captures and uses as a variable to send to the user&#8217;s primary SMTP address when enabl</p>
<h3>Simple Script</h3>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1795code3'); return false;">View Code</a> POWERSHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17953"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td class="code" id="p1795code3"><pre class="powershell" style="font-family:monospace;"><span style="color: #008000;">###############################</span>
<span style="color: #008000;"># UM Simple Automation v1</span>
<span style="color: #008000;"># By Elan Shudnow</span>
<span style="color: #008000;">###############################</span>
&nbsp;
<span style="color: #008000;">########## MODIFIABLE OPTIONS ##########</span>
<span style="color: #008000;"># Set This PIN to the Default PIN.  If the CSV PIN Field is blank, it uses this.  If not blank, it uses the CSV PIN.</span>
<span style="color: #800080;">$DefaultPIN</span> <span style="color: pink;">=</span> <span style="color: #804000;">12345</span>
&nbsp;
<span style="color: #008000;"># Set this to the location of the CSV file.</span>
<span style="color: #800080;">$mailboxes</span> <span style="color: pink;">=</span>  <span style="color: #008080; font-weight: bold;">Import-CSV</span> <span style="color: #800000;">&quot;UMsimple.csv&quot;</span>
&nbsp;
<span style="color: #008000;">########## DO NOT MODIFY ANYTHING BELOW THIS LINE ##########</span>
&nbsp;
<span style="color: #008000;"># Call the Loop to Enable Users</span>
<span style="color: #0000FF;">Foreach</span> <span style="color: #000000;">&#40;</span><span style="color: #800080;">$mailbox</span> <span style="color: #0000FF;">in</span> <span style="color: #800080;">$mailboxes</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
&nbsp;
	<span style="color: #008000;"># By default, Excel will have empty Alias Column so it will search by First Last.</span>
	<span style="color: #0000FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: pink;">!</span><span style="color: #000000;">&#40;</span><span style="color: #800080;">$mailbox</span>.alias<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
		<span style="color: #800080;">$User</span> <span style="color: pink;">=</span> Get<span style="color: pink;">-</span>Mailbox <span style="color: pink;">-</span>Identity <span style="color: #000000;">&#40;</span><span style="color: #800080;">$Mailbox</span>.First <span style="color: pink;">+</span> <span style="color: #800000;">&quot;&quot;</span> <span style="color: pink;">+</span> <span style="color: #800000;">&quot; &quot;</span> <span style="color: pink;">+</span> <span style="color: #800080;">$Mailbox</span>.Last<span style="color: #000000;">&#41;</span> <span style="color: pink;">-</span>ResultSize Unlimited <span style="color: #008080; font-style: italic;">-ErrorAction</span> SilentlyContinue <span style="color: pink;">|</span> <span style="color: #008080; font-weight: bold;">Where-Object</span> <span style="color: #000000;">&#123;</span> <a href="about:blank"><span style="color: #000080;">$_</span></a>.RecipientTypeDetails <span style="color: #FF0000;">-eq</span> <span style="color: #800000;">&quot;UserMailbox&quot;</span> <span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
	<span style="color: #0000FF;">else</span> <span style="color: #000000;">&#123;</span>
		<span style="color: #800080;">$User</span> <span style="color: pink;">=</span> Get<span style="color: pink;">-</span>Mailbox <span style="color: pink;">-</span>Identity <span style="color: #800080;">$Mailbox</span>.Alias <span style="color: pink;">-</span>ResultSize Unlimited <span style="color: #008080; font-style: italic;">-ErrorAction</span> SilentlyContinue <span style="color: pink;">|</span> <span style="color: #008080; font-weight: bold;">Where-Object</span> <span style="color: #000000;">&#123;</span> <a href="about:blank"><span style="color: #000080;">$_</span></a>.RecipientTypeDetails <span style="color: #FF0000;">-eq</span> <span style="color: #800000;">&quot;UserMailbox&quot;</span> <span style="color: #FF0000;">-and</span> <a href="about:blank"><span style="color: #000080;">$_</span></a>.alias <span style="color: #FF0000;">-eq</span> <span style="color: #800080;">$Mailbox</span>.Alias <span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
&nbsp;
	<span style="color: #008000;"># By default, Excel will have empty Alias Column so it will search by First Last.</span>
	<span style="color: #008000;"># This will notify you to modify the Alias Column so that you can search on a unique field if there are multiple</span>
	<span style="color: #008000;"># mailboxes with the same First Lastname that are on Exchange 2007.  The script ignores Exchange Legacy Mailboxes (Exchange 2000 and Exchange 2003).</span>
	<span style="color: #0000FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #800080;">$User</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
		<span style="color: #0000FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #800080;">$User</span>.Count <span style="color: #FF0000;">-gt</span> <span style="color: #804000;">1</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #008080; font-weight: bold;">Write-Warning</span> <span style="color: #800080;">$User</span> <span style="color: #800000;">&quot;There are multiple users with this First Name and Last Name.  Go into the spreadsheet and provide the alias for the correct mailbox user&quot;</span>
		<span style="color: #000000;">&#125;</span>
		<span style="color: #0000FF;">else</span> <span style="color: #000000;">&#123;</span>
			<span style="color: #0000FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #800080;">$User</span>.UMEnabled <span style="color: #FF0000;">-eq</span> <span style="color: #800080;">$false</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span>
				Enable<span style="color: pink;">-</span>UMMailbox <span style="color: pink;">-</span>Identity <span style="color: #800080;">$User</span>.GUID.toString<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: pink;">-</span>ummailboxpolicy $<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#40;</span>Get<span style="color: pink;">-</span>UMMailboxPolicy<span style="color: #000000;">&#41;</span>.Identity<span style="color: #000000;">&#41;</span> <span style="color: pink;">-</span>pin $<span style="color: #000000;">&#40;</span><span style="color: #0000FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: pink;">!</span><span style="color: #000000;">&#40;</span><span style="color: #800080;">$mailbox</span>.pin<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span> <span style="color: #800080;">$DefaultPIN</span> <span style="color: #000000;">&#125;</span> <span style="color: #0000FF;">else</span> <span style="color: #000000;">&#123;</span> <span style="color: #800080;">$Mailbox</span>.PIN <span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span> <span style="color: pink;">-</span>pinexpired <span style="color: #800080;">$true</span> <span style="color: pink;">-</span>Extensions <span style="color: #800080;">$Mailbox</span>.Extension <span style="color: pink;">-</span>NotifyEmail <span style="color: #800080;">$NotifyEmail</span>
				Set<span style="color: pink;">-</span>UMMailbox <span style="color: pink;">-</span>Identity <span style="color: #800080;">$User</span>.GUID.toString<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: pink;">-</span>OperatorNumber <span style="color: #800080;">$Mailbox</span>.Operator
			<span style="color: #000000;">&#125;</span>
			<span style="color: #0000FF;">else</span> <span style="color: #000000;">&#123;</span>
				<span style="color: #008080; font-weight: bold;">Write-Host</span> <span style="color: #800080;">$User</span> <span style="color: #800000;">&quot;is already enabled&quot;</span>
			<span style="color: #000000;">&#125;</span>
		<span style="color: #000000;">&#125;</span>
	<span style="color: #000000;">&#125;</span>
	<span style="color: #0000FF;">else</span> <span style="color: #000000;">&#123;</span>
		<span style="color: #008080; font-weight: bold;">Write-Host</span> <span style="color: #800000;">&quot;ERROR:&quot;</span> <span style="color: #000000;">&#40;</span><span style="color: #800080;">$Mailbox</span>.First <span style="color: pink;">+</span> <span style="color: #800000;">&quot;&quot;</span> <span style="color: pink;">+</span> <span style="color: #800000;">&quot; &quot;</span> <span style="color: pink;">+</span> <span style="color: #800080;">$Mailbox</span>.Last<span style="color: #000000;">&#41;</span> <span style="color: #800000;">&quot;'s Mailbox Does Not Exist&quot;</span>
	<span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<h3>Complex Script</h3>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1795code4'); return false;">View Code</a> POWERSHELL</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p17954"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
</pre></td><td class="code" id="p1795code4"><pre class="powershell" style="font-family:monospace;"><span style="color: #008000;">###############################</span>
<span style="color: #008000;"># UM Complex Automation v1</span>
<span style="color: #008000;"># By Elan Shudnow</span>
<span style="color: #008000;">###############################</span>
&nbsp;
<span style="color: #008000;">########## MODIFIABLE OPTIONS ##########</span>
<span style="color: #008000;"># Set This PIN to the Default PIN.  If the CSV PIN Field is blank, it uses this.  If not blank, it uses the CSV PIN.</span>
<span style="color: #800080;">$DefaultPIN</span> <span style="color: pink;">=</span> <span style="color: #804000;">12345</span>
&nbsp;
<span style="color: #008000;"># Set this to the location of the CSV file.</span>
<span style="color: #800080;">$mailboxes</span> <span style="color: pink;">=</span>  <span style="color: #008080; font-weight: bold;">Import-CSV</span> <span style="color: #800000;">&quot;UMcomplex.csv&quot;</span>
&nbsp;
<span style="color: #008000;"># Set this to the Notify Email you want.</span>
<span style="color: #800080;">$NotifyEmail</span> <span style="color: pink;">=</span> <span style="color: #800000;">&quot;notifyname@domain.com&quot;</span>
&nbsp;
<span style="color: #008000;"># Set this to the e-mail address where users will receive Welcome Messages From</span>
<span style="color: #800080;">$smtpFrom</span> <span style="color: pink;">=</span> “smtpfrom<span style="color: pink;">@</span>domain.com<span style="color: #800000;">&quot;
&nbsp;
$smtpServer = &quot;</span>hubserver.domain.com<span style="color: #800000;">&quot;
&nbsp;
########## DO NOT MODIFY ANYTHING BELOW THIS LINE ##########
&nbsp;
# Allows the user running the script to choose which UM Mailbox Policy the group of users in the CSV
# should belong to.  This will assign the policy to all users in the given CSV file.
write-host
write-host Exchange Server 2010 - Unified Messaging Enabling
write-host Please, select which UM Mailbox Policy you want assigned
write-host
write-host '1) North America'
write-host '2) London'
write-host
$location = Read-Host &quot;</span><span style="color: #008080; font-weight: bold;">Select</span> an option.. <span style="color: #000000;">&#91;</span><span style="color: #804000;">1</span><span style="color: pink;">-</span><span style="color: #804000;">2</span><span style="color: #000000;">&#93;</span><span style="color: pink;">?</span> <span style="color: #800000;">&quot;
&nbsp;
function Send-Email {
	Param ($To, $From, $Subject, $Body)
&nbsp;
	$msg = New-Object Net.Mail.MailMessage
	$msg.From = $From
&nbsp;
	$msg.To.Add($To)
&nbsp;
	$msg.IsBodyHtml = $true
	$msg.Body = $Body
	$msg.Subject = $Subject
&nbsp;
    $client = New-Object net.Mail.SmtpClient($smtpServer)
    $client.Send($msg)
}
&nbsp;
# Call the Loop to Enable Users
Foreach ($mailbox in $mailboxes) {
&nbsp;
	# By default, Excel will have empty Alias Column so it will search by First Last.
	if (!($mailbox.alias)) {
		$User = Get-Mailbox -Identity ($Mailbox.First + &quot;</span><span style="color: #800000;">&quot; + &quot;</span> <span style="color: #800000;">&quot; + $Mailbox.Last) -ResultSize Unlimited -ErrorAction SilentlyContinue | Where-Object { $_.RecipientTypeDetails -eq &quot;</span>UserMailbox<span style="color: #800000;">&quot; }
	}
	else {
		$User = Get-Mailbox -Identity $Mailbox.Alias -ResultSize Unlimited -ErrorAction SilentlyContinue | Where-Object { $_.RecipientTypeDetails -eq &quot;</span>UserMailbox<span style="color: #800000;">&quot; -and $_.alias -eq $Mailbox.Alias }
	}
&nbsp;
	# By default, Excel will have empty Alias Column so it will search by First Last.
	# This will notify you to modify the Alias Column so that you can search on a unique field if there are multiple
	# mailboxes with the same First Lastname that are on Exchange 2007.  The script ignores Exchange Legacy Mailboxes (Exchange 2000 and Exchange 2003).
	if ($User) {
		if ($User.Count -gt 1) {
			Write-Warning $User &quot;</span>There are multiple users with this First Name and Last Name.  Go into the spreadsheet and provide the alias <span style="color: #0000FF;">for</span> the correct mailbox user<span style="color: #800000;">&quot;
		}
		else {
			if ($User.UMEnabled -eq $false) {
				Enable-UMMailbox -Identity $User.GUID.toString() -ummailboxpolicy $(if ($location -eq 1) { &quot;</span>North America<span style="color: #800000;">&quot; } else { &quot;</span>London<span style="color: #800000;">&quot; }) -pin $(if (!($mailbox.pin)) { $DefaultPIN } else { $Mailbox.PIN }) -pinexpired $true -Extensions $Mailbox.Extension -NotifyEmail $NotifyEmail
				Set-UMMailbox -Identity $User.GUID.toString() -OperatorNumber $Mailbox.Operator
				$Extension = $Mailbox.Extension
				$Pin = $(if (!($mailbox.pin)) { $DefaultPIN } else { $Mailbox.PIN })
				$SubscriberNumber = $Mailbox.SubscriberNumber
$EmailBody = @&quot;</span>
Welcome to Exchange Unified Messaging<span style="color: pink;">!</span>
&nbsp;
Your Extension is <span style="color: #800080;">$Extension</span>
&nbsp;
Your PIN is <span style="color: #800080;">$Pin</span>
&nbsp;
Your Subcriber Access Number is <span style="color: #800080;">$SubscriberNumber</span>
&nbsp;
<span style="color: #800000;">&quot;@
&nbsp;
				$EmailSub = “Welcome to Exchange Unified Messaging!”
				$EmailTo = $User.PrimarySmtpAddress
				$EmailFrom = $smtpFrom
				Send-Email $EmailTo $EmailFrom $EmailSub $EmailBody
			}
			else {
				Write-Host $User &quot;</span>is already enabled<span style="color: #800000;">&quot;
			}
		}
	}
	else {
		Write-Host &quot;</span>ERROR:<span style="color: #800000;">&quot; ($Mailbox.First + &quot;</span><span style="color: #800000;">&quot; + &quot;</span> <span style="color: #800000;">&quot; + $Mailbox.Last) &quot;</span><span style="color: #800000;">'s Mailbox Does Not Exist&quot;
	}
}</span></pre></td></tr></table></div>

<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1795&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/06/13/exchange-unified-messaging-provisioning-scripts/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Exchange 2010 Databases and the RPCClientAccessServer Database Parameter</title>
		<link>http://www.shudnow.net/2010/04/18/creating-databases-and-the-rpcclientaccessserver-database-parameter/</link>
		<comments>http://www.shudnow.net/2010/04/18/creating-databases-and-the-rpcclientaccessserver-database-parameter/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 18:08:47 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Exchange 2010]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1776</guid>
		<description><![CDATA[When you create an RPC Client Access Array AFTER you have created Exchange 2010 databases, you need to go back to those existing databases and stamp them with the RPC Client Access Array FQDN.  That way, clients will use that RPC Client Access Array.  Otherwise, they won&#8217;t.  On the other hand, if you create the [...]]]></description>
			<content:encoded><![CDATA[<p>When you create an RPC Client Access Array AFTER you have created Exchange 2010 databases, you need to go back to those existing databases and stamp them with the RPC Client Access Array FQDN.  That way, clients will use that RPC Client Access Array.  Otherwise, they won&#8217;t.  On the other hand, if you create the RPC Client Access Array FQDN before you create your Exchange 2010 databases, nothing else is needed on your part.</p>
<p>There&#8217;s a bug with Outlook 2007 and Outlook 2010 that prevent the RPC Endpoint from updating.  This is similar to the bug in which Outlook 2007 will not update its Outlook Anywhere Endpoint which was fixed in Outlook 2010 Beta 2.  Because of this bug, it is very important that you get the RPCClientAccessServer database parameter configured correctly prior to moving users to Exchange 2010.  If you make this mistake and have the RPCClientAccessServer Database Parameter incorrectly and Outlook users are already hosted on Exchange 2010, once you modify the RPCClientAccessServer parameter for those clients, those clients can do an Outlook Profile Repair to get the updated change.  I will update this article in the future when this issue gets fixed.</p>
<p>So before you move users to Exchange 2010, please make sure that you either:</p>
<ol>
<li>Create the RPC Client Access Array before creating your databases OR</li>
<li>Go back on the databases and stamp those databases by running the following command:</li>
<div style="background-color: #dddddd;" dir="ltr">Set-MailboxDatabase -Identity &#8220;DatabaseName&#8221; –RPCClientAccessServer array.domain.com</div>
</ol>
<p>The reason why #1 works making #2 not necessary is the way Exchange assigns the RPC Client Access Array property to a database.  It does this in 3 different ways:</p>
<ol>
<li>If there is no RPC Client Access Array and you create the database on a server that hosts the MBX and CAS role, it will choose itself, always.</li>
<li>If there is no RPC Client Access Array and you create the database on a server where the CAS and MBX are not collocated on the same server, it will randomly pick a CAS in the same site to set as the RPCClientAccessServer.</li>
<li>If there is an RPC Client Access Array in that site, it will automatically set the FQDN of the CAS Array for the RPCClientAccessServer.</li>
</ol>
<p>Autodiscover will see the database the user lives on and will assign the user’s Exchange Server (RPC Endpoint) to what the RPCClientAccessServer parameter is.  That is why it’s important to make sure this setting is right before a user is moved to Exchange 2010.</p>
<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1776&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/04/18/creating-databases-and-the-rpcclientaccessserver-database-parameter/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Exchange 2010 SP1 Retention Policies</title>
		<link>http://www.shudnow.net/2010/04/08/exchange-2010-sp1-retention-policies/</link>
		<comments>http://www.shudnow.net/2010/04/08/exchange-2010-sp1-retention-policies/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 23:17:43 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Exchange 2010]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1741</guid>
		<description><![CDATA[Exchange 2010 RTM introduced Retention Policies as the successor to the Message Records Management (MRM) technology introduced in Exchange 2007.  MRM was the successor to Mailbox Manager Policies in Exchange 2003.  Message Records Management is called MRM 1.0 and Retention Policies is being called MRM 2.0 for short. MRM 1.0 as well as MRM 2.0 [...]]]></description>
			<content:encoded><![CDATA[<p>Exchange 2010 RTM introduced Retention Policies as the successor to the Message Records Management (MRM) technology introduced in Exchange 2007.  MRM was the successor to Mailbox Manager Policies in Exchange 2003.  Message Records Management is called MRM 1.0 and Retention Policies is being called MRM 2.0 for short. MRM 1.0 as well as MRM 2.0 are both available in Exchange 2010 but MRM 1.0 is being deprecated in Exchange 2010 SP1.</p>
<p>I won&#8217;t go into MRM 1.0 a whole lot but will show you the capabilities of Retention Policies in Exchange 2010, how it ties in with Outlook 2010, and how you can create Retention Policies via the Exchange Management Console in Exchange 2010 SP1.</p>
<p><span style="color: #ff0000;">Important</span>: Please keep in  mind that the screenshots below are not final as this article is based off of SP1 Beta software and may change by the time Exchange 2010 SP1  ships.</p>
<h3>Retention Policy functionality</h3>
<h4>Default Policy Tag</h4>
<p>A Default Policy Tag is the default Tag that is chosen for a Exchange specific folder such as Inbox, Calendar, Deleted Items, etc.  It affects all subfolders and subitems within that folder.  It is essentially the default policy/tag assigned to a specific folder. An example of a Default Policy Tag is when you enable a Personal Archive Mailbox for a user they are assigned a Default Policy Tag which says that all mailbox data will be moved to the archive after 2 years and it applies to all folders within an Exchange Mailbox.  Alternatively, you can also specify a specific part of the mailbox to be used for the Default Policy Tag instead (such as your Inbox, or Calendar, etc.)</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention02.jpg" alt="" width="539" height="89" /></p>
<h4>Policy Tags</h4>
<p>Policy Tags are the options available for a user to select on a Personal folder which are essentially any user created items which include a subfolder off of the Inbox, items created on your calendar, a user created task, and so on. This Policy Tag which is assigned to a Personal Folder is there to allow a user to override the Default Policy Tag.  It is essentially a way for a user to override the Default Policy (Default Policy Tag) set on a folder or a specific item or subfolder under the main folder that the Default Policy Tag is assigned to. So let&#8217;s say we enabled a Personal Archive Mailbox for a user and they have a Default Policy Tag for All Folders in a Mailbox for 2 years to be  pushed down to their Personal Archive Mailbox.  This Default Archive Policy also has a few Policy Tags that allow a user to select a folder or a specific item and choose the following options:</p>
<ul>
<li>1 year</li>
<li>5 years</li>
<li>Never</li>
</ul>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention03.jpg" alt="" width="568" height="452" /></p>
<p>By selecting 1 year, we are using the Retention Policy Tag that allows the user to select 1 year.  If we select User Folder Policy, we are essentially reverting back to the default setting which let&#8217;s the Default Policy Tag (2 years) to govern when that specific item gets moved to the archive.  So think of the Default Policy Tag as the default permission whereas a Policy Tag is a way for a user to override the Default Permission (the Default Policy Tag).</p>
<h4>Retention Policy</h4>
<p>A Retention Policy contains a Default Policy Tag and Policy Tags.  You assign this Retention Policy to a user.</p>
<h4>A Walkthrough of Creating a Retention Policy in the Exchange  Management Console</h4>
<p>Microsoft is moving away from MRM 1.0.  In fact, in the Exchange 2010 SP1 Exchange Management Console, Managed Folders and Custom Managed Folders which were MRM 1.0 functionality has been removed.  The Exchange Management Shell still has MRM 1.0 functionality.  As you can see by the following image, there&#8217;s no Managed Folders or Custom Managed Folder tabs.  But, there is a Retention Policy Tags and a Retention Policies Tab.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention01.jpg" alt="" width="761" height="50" /></p>
<h4>The Scenario</h4>
<p>Let&#8217;s say we have a MRM 1.0 policy that does the following: When an item is moved to Deleted Items, after 14 days it will be deleted with the ability to recover that deleted item.  In MRM 1.0 we couldn&#8217;t create any user configurable options.  But with Exchange 2010, we can use Policy Tags to allow our users to override the default we give them. We want to create a similar policy in Exchange 2010 SP1 (RTM did have Retention Policies but not the ability to create them in the Exchange Management Console).  We also want to take advantage of the Default Policy Tag to take care of the 14 day deletion but also provide additional Policy Tags to allow users to be able to choose a different time limit such as 7 days and 21 days.  Let&#8217;s go ahead and create a Default Policy Tag to Delete Items after 14 days.</p>
<p>So to recap the goals of our Retention Policy:</p>
<ul>
<li>Default Policy Tag to delete all items in the Deleted Items folder after 14 days</li>
<li>Policy Tag to allow users to override the Default Policy Tag and be able to select 7 days for individual folders and/or items</li>
<li>Policy Tag to allow users to override the Default Policy Tag and be able to  select 21 days for individual folders and/or items</li>
</ul>
<p>So let&#8217;s create our first Retention Policy Tag which will become our Default Policy Tag because we are assigning it to a folder that Exchange creates, the Deleted Items folder.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention04.jpg" alt="" width="637" height="556" /></p>
<p>We then want to allow the user the ability to select 7 days and 21 days. We will assign the Tag Type to Personal Folders which essentially makes it into a Policy Tag rather than a Default Policy Tag and will allow the users in Outlook 2010 to select 7 days or 21 days to override the Folder Policy (Default Policy Tag).</p>
<p>Let&#8217;s go ahead and create our 7 day Retention Tag.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention05.jpg" alt="" width="637" height="556" /></p>
<p>Let&#8217;s go ahead and create our 21 day Retention Tag.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention06.jpg" alt="" width="637" height="555" /></p>
<p>We can now see the Retention Tags and the Default Policy Tag.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention07.jpg" alt="" width="759" height="177" /></p>
<p>So let&#8217;s go over to the Retention Policies Tab and create a new Retention Policy that includes all three of our Retention Policy Tags.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention08.jpg" alt="" width="637" height="559" /></p>
<p>During the Policy creation we can specify mailboxes to associate the policy to; which I did.  After assigning the policy and running the Managed Folder Assistant (Start-ManagedFolderAssistant) to expedite the process of assigning the policy to the mailbox, I launched Outlook 2010 with this user&#8217;s account profile.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention09.jpg" alt="" width="404" height="240" /></p>
<p>If we take a look at the Inbox Policy, it just says to use the Parent Policy.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention10.jpg" alt="" width="401" height="209" /></p>
<p>But if we look at the Deleted Items Folder in which we created the Default Policy Tag for, we can see our Default Policy Tag at work.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010Sp1Retention11.jpg" alt="" width="403" height="271" /></p>
<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1741&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/04/08/exchange-2010-sp1-retention-policies/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Exchange 2010 SP1 Personal Archive Mailboxes on Separate Databases</title>
		<link>http://www.shudnow.net/2010/04/07/exchange-2010-sp1-personal-archive-mailboxes-on-separate-databases/</link>
		<comments>http://www.shudnow.net/2010/04/07/exchange-2010-sp1-personal-archive-mailboxes-on-separate-databases/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 02:14:45 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Exchange 2010]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1726</guid>
		<description><![CDATA[Exchange 2010 introduced the ability to move your personal archive mailbox to a separate mailbox database. This was a common request due to the limitations in Exchange 2010 RTM where the personal archive mailbox would be housed on the same database as the user mailbox.  This would of course limit the ability to use a [...]]]></description>
			<content:encoded><![CDATA[<p>Exchange 2010 introduced the ability to move your personal archive mailbox to a separate mailbox database. This was a common request due to the limitations in Exchange 2010 RTM where the personal archive mailbox would be housed on the same database as the user mailbox.  This would of course limit the ability to use a tiered storage model.</p>
<p>In order to move the personal archive mailbox, we would need to ensure both the user mailbox as well as the archive mailbox are on SP1.  So if you are in a multi-server environment where some mailbox servers are RTM and SP1 and you have moved the user to SP1 and want to then split off the personal archive mailbox to a separate database, make sure that server that you move the personal archive mailbox to contains SP1. Should you decide to move the mailbox back to RTM, you must move both the user mailbox and the personal archive both to an RTM Server.</p>
<p>So let&#8217;s go through two scenarios.  The first, we will move an existing user&#8217;s personal archive to a separate database.  The second scenario we will create a new user with a personal archive and have the personal archive live on a separate database.</p>
<p><span style="color: #ff0000;">Important</span>: Please keep in mind that the screenshots below SP1 Beta softwareand even the statement about Microsoft Support are not final as this article is based off of SP1 Beta software and may change by the time Exchange 2010 SP1 ships.</p>
<h3>Scenario 1 &#8211; Moving an existing Personal Archive Mailbox to a Separate Database</h3>
<p>So let&#8217;s take a look at a test mailbox I created, Frodo Baggins. We can see that both the user mailbox as well as the personal archive mailbox live on the same database.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010SP1ArchiveDB01.jpg" alt="" width="628" height="142" /></p>
<p>So let&#8217;s move the personal archive to a separate database, MDB2.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010SP1ArchiveDB02.jpg" alt="" width="844" height="120" /></p>
<p>To check the status of the Move Request, we can run the following command:</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010SP1ArchiveDB03.jpg" alt="" width="709" height="120" /></p>
<p>Now that we see the move has been Completed, we can check again to see what mailbox our user mailbox and our personal archive mailbox are located on. As you will see, our user mailbox and our personal archive will be housed on separate databases.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010SP1ArchiveDB04.jpg" alt="" width="612" height="130" /></p>
<p>Let&#8217;s say we want to then move the Personal Archive Mailbox to MDB1.  But this time, let&#8217;s use the Exchange Management Console. We can see the existing database that both the User Mailbox and the Personal Archive Mailbox lives on.  We can also choose to move only the Personal Archive Mailbox.  We will choose MDB1.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010SP1ArchiveDB08.jpg" alt="" width="634" height="465" /></p>
<p>We will then go ahead and verify again that the personal archive has successfully been moved to MDB1.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010SP1ArchiveDB09.jpg" alt="" width="604" height="131" /></p>
<h3>Scenario 2 &#8211; Creating a new User and separating their user mailbox and personal archive mailbox to separate databases</h3>
<p>Microsoft has also updated the GUI so that when you create a new user, you can specify what database the user mailbox will live on as well as what database the personal archive mailbox will live on.  Let&#8217;s go ahead and create a new Active Directory user and assign this user an Exchange Mailbox as well as a Personal Archive Mailbox.</p>
<p>We will specify the User Mailbox to live on MDB3.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010SP1ArchiveDB05.jpg" alt="" width="633" height="408" /></p>
<p>We will specify the Personal Archive Mailbox to live on MDB2 which is different from the User Mailbox which will live on MDB3.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010SP1ArchiveDB06.jpg" alt="" width="636" height="400" /></p>
<p>We can then verify in the Exchange Management Shell to see if our User Mailbox is properly in MDB3 while our Personal Archive Mailbox is in MDB2.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/2010SP1ArchiveDB07.jpg" alt="" width="613" height="131" /></p>
<h3>A note about Microsoft Support</h3>
<p>One important thing to note, is that in order to have support for  personal archive mailboxes being on separate databases, both mailbox  databases must be located within the same Active Directory Site.   The only time a personal archive will be supported on a database in a  separate Active Directory Site is during a failover scenario where the  database copy fails and activates on a separate server located in a  separate Active Directory site.  But for normal operations, the user  mailbox and personal archive mailbox database should be in the same  Active Directory Site.</p>
<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1726&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/04/07/exchange-2010-sp1-personal-archive-mailboxes-on-separate-databases/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Exchange 2010 RTM High Availability Load Balancing Options</title>
		<link>http://www.shudnow.net/2010/03/17/exchange-2010-rtm-high-availability-load-balancing-options/</link>
		<comments>http://www.shudnow.net/2010/03/17/exchange-2010-rtm-high-availability-load-balancing-options/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 04:30:02 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Exchange 2010]]></category>
		<category><![CDATA[ISA]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1685</guid>
		<description><![CDATA[With Exchange 2010 comes many advantages in the HA realm.  One of them is the ability to connect to the Client Access Server for RPC.  This means, when a Mailbox Server does a *over (failover or a switchover), the user is still connected to their RPC Endpoint.  You can also create a Client Access Array [...]]]></description>
			<content:encoded><![CDATA[<p>With Exchange 2010 comes many advantages in the HA realm.  One of them is the ability to connect to the Client Access Server for RPC.  This means, when a Mailbox Server does a *over (failover or a switchover), the user is still connected to their RPC Endpoint.  You can also create a Client Access Array which load balances your RPC Endpoint on your CAS Servers.  Lots of information on the RPC Client Access Server <a href="http://www.exchange-genie.com/2009/09/momt-mapi-on-the-middle-teir/">here</a> and <a href="http://www.msexchange.org/articles_tutorials/exchange-server-2007/planning-architecture/uncovering-new-rpc-client-access-service-exchange-2010-part1.html">here</a>.  So what options are available for load balancing this new RPC Client Access Array and at the same time, load balancing all our other services?  And what are the pros/cons of each method?  If you want to know, read on&#8230;</p>
<h3>Exchange Load Balancing Options</h3>
<p>In Exchange 2007, if you wanted any type of HA, you needed at least four servers.  2 for CCR Nodes and 2 for HUB/CAS Nodes.  The reason why you cannot have 2 nodes altogether is that CCR Nodes were limited to the Mailbox role only.  For an Exchange Site, you need to always have at least the  HUB/CAS/MBX Role  for that site to be operational.  In Exchange 2010, more options are now available.  You now have something called Database Availability Groups (DAGs).  These DAG members can contain all Exchange roles (HUB/CAS/MBX/UM) but still may not contain the Edge Transport role.</p>
<p>There is a problem though.  There is a Windows limitation that allows you to install Windows Network Load Balancing on a server that also contains Failover Clustering Services. So while we can now have 2 Exchange 2010 Servers, we need a way to load balance the CAS role to provide High Availability for the following CAS Services:</p>
<ul>
<li>Outlook Web App (formerly Outlook Web Access) (HTTP Traffic)</li>
<li>Exchange Control Panel (HTTP Traffic)</li>
<li>Exchange Web Services (HTTP Traffic)</li>
<li>Exchange ActiveSync (HTTP Traffic)</li>
<li>Autodiscover (HTTP Traffic)</li>
<li>Offline Address Book (HTTP Traffic)</li>
<li>Outlook Anywhere (HTTP Traffic)</li>
<li>RPC Client Access (RPC  Traffic)</li>
</ul>
<p>There are a few options for load balancing.  The first is the ability to use ISA.  The problem here, is that ISA can only load balance HTTP-based traffic.  If you take a look at the bulleted list above, you can see that RPC Client Access Service is RPC Traffic which means that ISA cannot load balance this traffic.  We have a few load balancing options then:</p>
<ol>
<li><span style="text-decoration: underline;"><strong>2 Multi-Role DAG Members and Hardware Load Balancers</strong></span> &#8211; Utilize 2 Multi-Role DAG Members (MBX/HUB/CAS).  Use a hardware load balancer to load balance all of the bulleted items above including the RPC Client Access Service using an RPC Client Access Array  which load balances port 135 for the RPC Endpoint Mapper and 1024-65535  ports.  Typically, since you are using High Availability, this means that you would most likely want to have 2 hardware load balancers.</li>
<p><img class="alignnone" src="http://www.shudnow.net/images/Exc2010LB01.jpg" alt="" width="219" height="150" /></p>
<li><span style="text-decoration: underline;"><strong>2 DAG Members, 2 HUB/CAS Servers, and Windows Network Load Balancing</strong></span><strong> -</strong><span style="text-decoration: underline;"><strong> </strong></span>Utilize 2 DAG Members (MBX).  Use 2 HUB/CAS Servers with Windows Network Load Balancing.  Windows Network Load Balancing will load balance all of the bulleted items above including the RPC Client Access Service using an RPC Client Access Array which load balances port 135 for the RPC Endpoint Mapper and 1024-65535 ports.</li>
<p><img class="alignnone" src="http://www.shudnow.net/images/Exc2010LB02.jpg" alt="" width="186" height="322" /></p>
<li><span style="text-decoration: underline;"><strong>2 DAG Members and DNS Round Robin</strong></span><strong> -</strong><span style="text-decoration: underline;"><strong> </strong></span>Use  2 Multi-Role DAG Members (MBX/HUB/CAS).  Use DNS Round Robin to achieve a  &#8220;poor man&#8217;s solution&#8221; type of load balancing.  With this scenario, you  will not have automatic failover for the RPC Client Access Service.  You  will essentially create two A Record for the RPC Client Access Array;  one pointing to the first multi-role DAG Member and one pointing to the  second multi-role DAG Member.  You will most likely want to lower the  TTL values of these DNS records to 5 minutes so if a failure does  happen, you can remove one of the A records and the clients will flush  their DNS cache within 5 minutes time.</li>
<p><img class="alignnone" src="http://www.shudnow.net/images/Exc2010LB03.jpg" alt="" width="386" height="215" /></p>
<li><span style="text-decoration: underline;"><strong>2 DAG Members, ISA/TMG/UAG, and either Hardware Load Balancing or DNS Round Robin</strong></span><strong> -</strong><span style="text-decoration: underline;"><strong> </strong></span>Use 2 Multi-Role DAG Members (MBX/HUB/CAS).  Use ISA/TMG/UAB to load balance all HTTP items from the bulleted list above. The issue here is that now with Exchange 2010, for mailbox access, users connect to the Client Access Server for their RPC Endpoint.  To make this redundant, we create an RPC Client Access Array.  This RPC Client Access Array can be load balanced through a hardware load balancer, DNS Round Robin, or Windows Network Load Balancing.  ISA/TMG/UAG cannot load balance non-HTTP Traffic.  So if you have ISA/TMG/UAG, you can still use it to load balance all HTTP Traffic but you would still need to use a Hardware Load Balancer, DNS Round Robin, or Windows Network Load Balance to load balance the RPC Client Access Array.  The example picture below will show the use of UAG with a Hardware Load Balance mix.</li>
<p><img class="alignnone" src="http://www.shudnow.net/images/Exc2010LB04.jpg" alt="" width="318" height="193" /></ol>
<h3>Exchange Load Balancing Options and their benefits</h3>
<p>Taking a look at the above list of options, we can use several different options including Windows Network Load Balancing, Hardware Load Balancing, and DNS Round Robin. Each has their pros and cons in terms of cost and functionality.</p>
<h4>Hardware Load Balancing</h4>
<p>Hardware Load Balancers can have the most capacity in terms of user connections.  But for SMBs, you won&#8217;t have to worry about load.  The load is more for very large organizations.  In fact, Microsoft recommends that if you are going to require over 7 HUB/CAS Servers in a load balanced farm, to use Hardware Load Balancers instead of Windows Network Load Balancing.  Hardware Load Balancers are also the most expensive option.</p>
<p>Hardware Load Balancers do have the best functionality from a perspective of Client to Server Affinity depending on the vendor used.  For example, we can use multiple affinities and have fallbacks to a specific affinity of our preferred affinity fails.  For example, we can set up up our hardware load balancers to use the following affinity in terms of preference:</p>
<ul>
<li>Existing Browser-Based Cookie</li>
<li>Hardware Load Balanced created cookie</li>
<li>SSL Session ID</li>
<li>Source IP</li>
</ul>
<p>The goal here is to make sure that every user is load balanced evenly and that automatic failover can occur quickly and smoothly.</p>
<h4>Windows Network Load Balancers</h4>
<p>Windows Network Load Balancers do not achieve as much capacity in terms of user connections as a Hardware Load Balancer, but they can still handle a lot of connections.  Windows Network Load Balanced farms can use as many as 8 CAS Servers without suffering a performance degradation.  In order to have the need for 8+ CAS Servers, you&#8217;ll need to have many users (tens of thousands). Windows Network Load Balancing is built into Windows Server and therefore, it&#8217;s a large cost savings in comparison to purchasing hardware load balancers.</p>
<p>Windows Network Load Balancers do not have as good of functionality of Hardware Load Balancers from a perspective of Client to Server Affinity.  For example, we only have one affinity method.  That method is Source IP.  The downside to using Source IP is if you have a lot of connections coming from a NAT&#8217;d Source IP. This means that all of these connections will end up hitting the same Client Access Server as again, the only Affinity Method a Windows Network Load Balancer has is Source IP.</p>
<p>Most likely, if you don&#8217;t have the need for more than 8 CAS Servers,  Windows Network Load Balancing will suffice for you needs.  It&#8217;s cheap, comes with Windows, and does its job.</p>
<h4>ISA Server, TMG, or UAG</h4>
<p>ISA/TMG/UAG Servers to have more capabilities than Windows Network Load Balancers.  The one downside to them is that they cannot load balance RPC Traffic.  Because of that, you can still use ISA/TMG/UAG to load balance your HTTP traffic, but you&#8217;ll still need a Hardware Load Balancer or a Windows Network Load Balancer to load balance your RPC Client Access Array.</p>
<p>ISA/TMG/UAG do scale better than Windows Network Load Balancing but not as well as a Hardware Load Balancer.  ISA/TMG/UAG does not cost as much as a Hardware Load Balancer but is more expensive than Windows Network Load Balancing.  ISA/TMG/UAG also has the capability to do Load Balanced created cookies as well as Source IP Affinity depending on the protocol ISA/TMG/UAG is publishing.</p>
<p>Another upside to using ISA/TMG/UAG is that they can do pre-authentication.  This means that if a server goes down in which a client has affinity to, ISA/TMG/UAG still contains the authentication context of the user and automatically re-authenticates to the new Client Access Server.</p>
<h4>DNS Round Robin</h4>
<p>DNS Round Robin scales just as high as Hardware Load Balancers because the connections will just go directly to the Client Access Servers.  If anything, it has the highest scale as you don&#8217;t have anything in the middle doing anything with the connections.  It&#8217;s also free to use!  But in this case, free is not necessarily good because you lose a lot of functionality.  Hardware Load Balancers, Windows Network Load Balancers, and ISA/TMG/UAG all have the capability to detect server failures and automatically stop sending to the server and direct all traffic to a server that is operational.</p>
<p>DNS Round Robin has no automatic server failure detection.  If a host goes down, an Administrator will need to realize it, remove the DNS A/HOST Record for the server that went down, and then clients will have to wait for the TTL value on the old DNS record to expire.  When that happens, the client will begin connecting to the proper server. So you save a lot of money going with this option, but you lose all automation and gain downtime instead.</p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 1002px; width: 1px; height: 1px; overflow: hidden;">
<ol>
<li><span style="text-decoration: underline;"><strong>2 DAG Members and DNS Round Robin</strong></span><strong> -</strong><span style="text-decoration: underline;"><strong> </strong></span>Use  2 Multi-Role DAG Members (MBX/HUB/CAS).  Use ISA to load balance all  HTTP items from the bulleted list above. Use DNS Round Robin to achieve a  &#8220;poor man&#8217;s solution&#8221; type of load balancing.  With this scenario, you  will not have automatic failover for the RPC Client Access Service.  You  will essentially create two A Record for the RPC Client Access Array;  one pointing to the first multi-role DAG Member and one pointing to the  second multi-role DAG Member.  You will most likely want to lower the  TTL values of these DNS records to 5 minutes so if a failure does  happen, you can remove one of the A records and the clients will flush  their DNS cache within 5 minutes time.</li>
<p><img class="alignnone" src="http://www.shudnow.net/images/Exc2010LB03.jpg" alt="" width="386" height="215" /></ol>
</div>
<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1685&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/03/17/exchange-2010-rtm-high-availability-load-balancing-options/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Exchange 2010 RPC Client Access Service and Multiple Sites</title>
		<link>http://www.shudnow.net/2010/03/04/exchange-2010-rpc-client-access-service-and-multiple-sites/</link>
		<comments>http://www.shudnow.net/2010/03/04/exchange-2010-rpc-client-access-service-and-multiple-sites/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 04:52:12 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Exchange 2010]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1663</guid>
		<description><![CDATA[A common question I see out there is if the RPC Client Access Service (including Client Access Service Arrays) can access databases in other sites. The answer is, yes. Let&#8217;s take a look at a couple scenarios. Scenario #1 &#8211; Full Site Failure Let’s say you have a Client Access Server Array called array.domain.com.  Primary [...]]]></description>
			<content:encoded><![CDATA[<p>A common question I see out there is if the RPC Client Access Service (including Client Access Service Arrays) can access databases in other sites. The answer is, yes. Let&#8217;s take a look at a couple scenarios.</p>
<h3>Scenario #1 &#8211; Full Site Failure</h3>
<p>Let’s say you have a Client Access Server Array called array.domain.com.  Primary Site goes down.  As a part of the manual site switchover process, you must update the DNS records in your Primary Site to point to the CAS infrastructure at your DR Site.  One out of several DNS records you change will include the CAS Array. You change array.domain.com to point to DRSiteCAS instead of PrimarySiteCAS.  The client (after the DNS record flushes – recommended for TTL value to be 5 minutes for DNS records in site resilient solutions) will then start to connect to the DRSiteCAS which will then access the database in the DR Site.</p>
<h3>Scenario #2 &#8211; Server Failure(s) in Primary Site and Disabling Automatic Activation for Databases and Servers</h3>
<p>In the case where all database copies go down in the Primary Site, your databases can automatically failover to the DR Site as long as you allow automatic activation on the DR Servers (yes, you can turn off automatic activation on databases and servers) and as long as you still have Majority for your Quorum. In this scenario, the RPC Client Access (and array) can access the mailbox databases that are mounted in the DR Site.</p>
<h4>Automatic Activation</h4>
<p>As I just eluded to above, it is possible to turn off automatic activation on databases and servers. There is something called Database Activation Policy.  Let&#8217;s say you wanted to disable a specific database from being considered in the Automatic Activation Process.</p>
<p>You can use the following command to prevent the database from being considered in the Automatic Activation Process:</p>
<div style="background-color: #dddddd;" dir="ltr">Suspend-MailboxDatabaseCopy -Identity DB1\MBX2 -ActivationOnly</div>
<p>This example resumes the copy of the database DB1 on the server MBX2 for automatic activation:</p>
<div style="background-color: #dddddd;" dir="ltr">Resume-MailboxDatabaseCopy -Identity DB1\MBX2</div>
<p>This is also possible to do at the mailbox server level using the Set-MailboxServer cmdlet.  You can use the following command to prevent any databases on a specific mailbox server from being considered in the Automatic Activation Process:</p>
<div style="background-color: #dddddd;" dir="ltr">Set-MailboxServer -Identity MailboxServer -DatabaseCopyAutoActivationPolicy Blocked<em> </em></div>
<p>This example resumes all database copies on the mailbox server &#8220;MailboxServer&#8221; for automatic activation:</p>
<div style="background-color: #dddddd;" dir="ltr">Set-MailboxServer -Identity MailboxServer -DatabaseCopyAutoActivationPolicy Unrestricted</div>
<h4>Example</h4>
<p>Let’s say we have 6 DAG Servers with 4 in the Primary Site and 2 in the DR Site with no modifications to the Automatic Activation Policy (DAG Servers in the DR Site can automatically mount databases).  Let&#8217;s say, we currently have a lack of funds for storage which prohibit the ability to have mailbox database copies on all servers.  So PrimarySiteMBX01 and PrimarySiteMBX02 in the Primary Site are mirrored in terms of mailbox database copies.  PrimarySiteMBX03 and PrimarySiteMBX04 in the Primary Site are mirrored in terms of database copies.  PrimarySiteMBX01 and PrimarySiteMBX02 are mirrored with SecondarySitMBX0102 in the DR Site and PrimarySiteMBX03 and PrimarySiteMBX04 are mirrored with SecondarySiteMBX0304 in the DR Site.</p>
<p>To make it a bit more clear, the following image shows database distribution.  You can see there are 6 nodes and 3 copies of each database.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/RPCClientAccessSites01.jpg" alt="" width="510" height="434" /></p>
<p>Should PrimarySiteMBX01 and PrimarySiteMBX02 go down (as illustrated below), SecondarySiteMBX0102 can automatically mount the database because majority is still there for quorum.  In this case, the RPC Client Access Array in the Primary Site will still successfully be able to provide mailbox access to the databases mounted on SecondarySiteMBX0102 in the DR Site.  This is one of the nice things I like about Exchange 2010 High Availability, is that if your DAGs go down, you can allow the copy in the DR Site to automatically activate (provided the Database Activation Policy as described above allows it to automatically mount) whereas in Exchange 2007, you had to manually activate any SCR copy.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/RPCClientAccessSites02.jpg" alt="" width="509" height="431" /></p>
<p>Exchange 2007 and Exchange 2010 Clusters both use Majority Node Set Clustering.  This means that 50% of your votes (server votes and/or 1 file share witness) need to be up and running.  With DAGs, if you have an odd number of DAG nodes in the same DAG (Cluster), you have an odd number of votes so you don&#8217;t have a witness.  If you have an even number of DAGs nodes, you will have a file share witness in case half of your nodes go down, you have a witness who will act as that extra +1 number.</p>
<p>So in this scenario, we have 6 votes from the servers plus 1 witness from the file share witness totaling 7 votes.  This means we can have up to 3 servers fail and our cluster will still be online.  This is because if you are in the scenario where we 7 votes, if 3 go down that leaves us with 4 votes which satisfies the 50% + 1 majority rule. Because of this, we still have majority and our quorum and cluster are still fully operational.</p>
<p>Now when exactly would we have to do a manual switchover?  Well, there&#8217;s a couple cases.  The first would be if your Primary Datacenter has a complete outage.  This may be due to power failure, environmental disaster, etc&#8230;  The other is because all Primary Datacenter DAG members go down or just enough servers go down (again, 50% + 1 voters must be up which means if we lose more than 3 machines (includes FSW), our entire cluster goes offline.  In this case, you&#8217;ll have to do a manual datacenter switchover.  You&#8217;ll move over all services to the secondary datacenter including changing the RPC Client Access Server FQDN to point to the single CAS Server or the standby VIP that publishes RPC across multiple Secondary Datacenter CAS Servers.</p>
<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1663&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/03/04/exchange-2010-rpc-client-access-service-and-multiple-sites/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Forcing Address Book Updates in Communicator 2007 R2</title>
		<link>http://www.shudnow.net/2010/01/20/forcing-address-book-updates-in-communicator-2007-r2/</link>
		<comments>http://www.shudnow.net/2010/01/20/forcing-address-book-updates-in-communicator-2007-r2/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 02:22:18 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[OCS]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1616</guid>
		<description><![CDATA[Yes, this is old news and there&#8217;s about 462 blog entries (ok, that&#8217;s a made up number, but there are a lot) about how to force Communicator 2007 R2 to do an Address Book (Galcontacts.db) update.  These blog entries will talk about the July 2009 update for Communicator 2007 R2 and how it introduced a [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, this is old news and there&#8217;s about 462 blog entries (ok, that&#8217;s a made up number, but there are a lot) about how to force Communicator 2007 R2 to do an Address Book (Galcontacts.db) update.  These blog entries will talk about the <a href="http://support.microsoft.com/kb/972403/">July 2009 update for Communicator 2007 R2</a> and how it introduced a random delay of 0-60 minutes for Communicator 2007 R2 to download an updated GalContacts.db to prevent the network from getting hammered by so many clients downloading an updated GalContacts.db all at the same time.  And yes, these blog entries also talk about a registry entry you can create called GalDownloadInitialDelay and creating a Dword set to 0 in order to force Communicator to do an instant update.</p>
<p>Some blog articles that talk about this include:</p>
<p><a href="http://www.tincupsandstring.com/2009/12/01/forcing-address-book-download/">http://www.tincupsandstring.com/2009/12/01/forcing-address-book-download/</a></p>
<p><a href="http://www.markc.me.uk/MarkC/Blog/Entries/2009/12/17_Force_Downloading_the_Address_Book_in_OCS.html">http://www.markc.me.uk/MarkC/Blog/Entries/2009/12/17_Force_Downloading_the_Address_Book_in_OCS.html</a></p>
<p>Now I&#8217;m sure you are asking yourself why I am creating this entry?  Is it just to repeat information that&#8217;s already out there?  Of course not!</p>
<p>So, Communicator 2007 R2 is a 32-bit (x86) application.  That registry entry works perfectly fine on x86 systems.  But, if you are running on a x64 system, it won&#8217;t.  Why?  Well, because when you run x86 applications on a x64 based system, it utilizes a system in Windows called Windows on Windows (WOW64).  WOW64 has its own section within the registry called Wow6432Node.</p>
<p>So let&#8217;s say we take the registry key for our Communicator x86 (Communicator x64 not available) and run it on an x86 system.  The following registry key works fine:</p>
<div style="background-color: #dddddd;" dir="ltr">
<p>Windows Registry Editor Version 5.00</p>
<p>[HKEY_CURRENT_USER\Software\Policies\Microsoft\Communicator]<br />
&#8220;GalDownloadInitialDelay&#8221;=dword:00000000</p>
</div>
<p>But let&#8217;s say we have an x64 system.  The above registry key will not work.  We need to utilize the WOW6432Node part of the registry.  The following registry key works for x64 systems:</p>
<div style="background-color: #dddddd;" dir="ltr">
<p>Windows Registry Editor Version 5.00</p>
<p>[HKEY_CURRENT_USER\Software\Wow6432Node\Policies\Microsoft\Communicator]<br />
&#8220;GalDownloadInitialDelay&#8221;=dword:00000000</p>
</div>
<p>Please make sure you back up your registry before making changes as making changes to the registry can be harmful to your system if not done properly.</p>
<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1616&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/01/20/forcing-address-book-updates-in-communicator-2007-r2/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Exchange 2010 Moderation Features Grayed Out?</title>
		<link>http://www.shudnow.net/2010/01/19/exchange-2010-moderation-features-grayed-out/</link>
		<comments>http://www.shudnow.net/2010/01/19/exchange-2010-moderation-features-grayed-out/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 19:11:10 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Exchange 2010]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1606</guid>
		<description><![CDATA[Exchange 2010 introduces a new moderation feature.  This moderation feature can be used to perform moderation on both messages submitted to a Distribution Group and/or requests to join a group through the self-service options provided by the Exchange Control Panel (ECP). The Issue For both the Distribution Group Mail Flow Message Moderation as well as [...]]]></description>
			<content:encoded><![CDATA[<p>Exchange 2010 introduces a new moderation feature.  This moderation feature can be used to perform moderation on both messages submitted to a Distribution Group and/or requests to join a group through the self-service options provided by the Exchange Control Panel (ECP).</p>
<h4>The Issue</h4>
<p>For both the Distribution Group Mail Flow Message Moderation as well as the Membership Approval Moderation were both grayed out for us.  I did a dump of these two groups by running the following two commands:</p>
<div style="background-color: #dddddd;" dir="ltr">
<div style="background-color: #dddddd;" dir="ltr">
<p>Get-DistributionGroup &#8220;Group 1&#8243; | FL |  Out-File C:\Groups\Group1.txt</p>
</div>
</div>
<div style="background-color: #dddddd;" dir="ltr">
<div style="background-color: #dddddd;" dir="ltr">
<p>Get-DistributionGroup &#8220;Group 2&#8243; | FL | Out-File C:\Groups\Group2.txt</p>
</div>
</div>
<h4>Distribution Group Mail Flow Message Moderation</h4>
<p><img class="alignnone" src="http://www.shudnow.net/images/MessageModerationGrayed01.jpg" alt="" width="426" height="579" /></p>
<h4>Membership Approval Moderation</h4>
<p><img class="alignnone" src="http://www.shudnow.net/images/MessageModerationGrayed02.jpg" alt="" width="438" height="492" /></p>
<h4>The Fix</h4>
<p>After taking a look at both .txt files, I noticed that the user that was specified under ManagedBy no longer exists.  I changed the ManagedBy to an existing user and all the Moderation feature options lit up and were no longer grayed out.</p>
<p>Keep in mind, you absolutely will need to have a Manager specified in order for the moderation features to light up.  This makes sense with the Membership Approval tab as it only allows you to use Group Managers.  For the Message Moderation, it would seem that Microsoft should not gray everything out by default when you don&#8217;t have a Group Manager specified since it does allow you to specify specific people for moderation instead of using the Group Manager.</p>
<p>You can use the following command to modify all your groups in bulk:</p>
<div style="background-color: #dddddd;" dir="ltr">Get-DistributionGroup | Set-DistributionGroup -ManagedBy &#8220;Manager Here&#8221;</div>
<p><span style="color: #ff0000;">Update (1/20/2010) </span>- I ran into another issue today where the moderation options were grayed out even with a valid group manager.  I changed the manager and changed it back and the moderation features were lit up.</p>
<p><span style="color: #ff0000;">Update  (2/17/2010)</span> &#8211; I forgot to update this with another issue after my 1/20/2010 update.  After updating the Group Manager for a group, the Address Book service in OCS seems to consider this group as an entirely new group.  This means that if people had this group added in OCS and you modified the Group Manager, that group becomes void in Communicator and stops expanding.  I had to end up deleting the GalContacts.db and let a client download a new GalContacts.db.  The client had to delete the group from Communicator and then delete it in order for the group to start working again.</p>
<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1606&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/01/19/exchange-2010-moderation-features-grayed-out/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OCS 2007 R2 Standard Edition Front End Automated Backups</title>
		<link>http://www.shudnow.net/2010/01/18/ocs-2007-r2-standard-edition-front-end-automated-backups/</link>
		<comments>http://www.shudnow.net/2010/01/18/ocs-2007-r2-standard-edition-front-end-automated-backups/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 16:22:04 +0000</pubDate>
		<dc:creator>Elan Shudnow</dc:creator>
				<category><![CDATA[OCS]]></category>

		<guid isPermaLink="false">http://www.shudnow.net/?p=1586</guid>
		<description><![CDATA[OCS 2007 R2 Standard Edition Front Ends utilize SQL 2005 Express with SP2 for storing its databases.  Unfortunately, with SQL Express, you will have to backup using SQL Server Management Studio or find an automated way.  This article will detail the steps I utilize to make backing up easier and automated. For information on how [...]]]></description>
			<content:encoded><![CDATA[<p>OCS 2007 R2 Standard Edition Front Ends utilize SQL 2005 Express with SP2 for storing its databases.  Unfortunately, with SQL Express, you will have to backup using SQL Server Management Studio or find an automated way.  This article will detail the steps I utilize to make backing up easier and automated. For information on how to back up OCS, please see the Backup and Restoration Guide <a href="http://go.microsoft.com/fwlink/?LinkID=154160">here</a>.</p>
<p>The following data will ultimately need to be backed up:</p>
<ol>
<li>Global Config</li>
<li>Pool Config</li>
<li>Machine Config</li>
<li>SQL Databases</li>
<li>Standard Edition File Shares</li>
</ol>
<p>The first command specifies the /level to be global and pool.  The second command specifies the /level to be machine.  What we will do is create a batch file (.bat) and place both commands in this .bat and have them run against the server every 6pm using scheduled tasks.</p>
<div style="background-color: #dddddd;" dir="ltr">
<div style="background-color: #dddddd;" dir="ltr">
<p>lcscmd /config /action:export /level:global,pool /configfile:&lt;drive&gt;:\&lt;path&gt;\&lt;filename&gt;.xml /poolname:[name of Standard Edition server, which is used for the pool name]</p>
</div>
</div>
<div style="background-color: #dddddd;" dir="ltr">
<div style="background-color: #dddddd;" dir="ltr">
<p>lcscmd /config /action:export /level:machine /configfile: &lt;drive&gt;:\&lt;path&gt;\&lt;filename&gt;.xml /fqdn:[FQDN of server from which settings are to be exported]</p>
</div>
</div>
<p>Our Servername is SHUD-OCSFE01.  The folder to store the backups is C:\OCSBackup.  We&#8217;ll also be running the batch file from the C:\OCSBackup.  Because the folder which contains lcscmde.exe is not a part of the system variables, we&#8217;ll have to specify the entire path for lcscmd.exe. Taking this information into consideration, our two commands for our batch file will be:</p>
<div style="background-color: #dddddd;" dir="ltr">
<div style="background-color: #dddddd;" dir="ltr">
<p>&#8220;C:\Program Files\Common Files\Microsoft Office Communications Server 2007 R2\LCSCmd.exe&#8221; /config /action:export /level:global,pool /configfile:C:\OCSBackup\SHUD-OCSFE01_GlobalPool_Backup.xml /poolname:SHUD-OCSFE01</p>
</div>
</div>
<div style="background-color: #dddddd;" dir="ltr">
<div style="background-color: #dddddd;" dir="ltr">
<p>&#8220;C:\Program Files\Common Files\Microsoft Office Communications Server 2007 R2\LCSCmd.exe&#8221; /config /action:export /level:machine /configfile:C:\OCSBackup\SHUD-OCSFE01_Machine_Backup.xml /fqdn:SHUD-OCSFE01.shudnow.net</p>
</div>
</div>
<p>After executing this .bat file, we can see the two files have been created.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_01.jpg" alt="" width="712" height="177" /></p>
<h3>SQL Databases</h3>
<p>The following is the list of SQL Databases that an OCS Standard Edition Front End uses:</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_02.jpg" alt="" width="519" height="425" /></p>
<p>Because we are utilizing SQL Express, we will have to find some other method other than a backup agent to automate the backups. Much of the SQL Backup information is provided by the SQLDBATips Blog.  The following article I utilized is located <a href="http://www.sqldbatips.com/showarticle.asp?ID=27">here</a>.</p>
<p>Create a file with the extension of sql in our OCSBackup folder.  Also, create a new folder called C:\Reports for script reporting. I created a file C:\OCSBackup\ocssqlbackup.sql with the following text:</p>
<p><em>exec expressmaint<br />
@database      = &#8216;ALL_USER&#8217;,<br />
@optype        = &#8216;DB&#8217;,<br />
@backupfldr    = &#8216;c:\ocsbackup&#8217;,<br />
@reportfldr    = &#8216;c:\reports&#8217;,<br />
@verify        = 1,<br />
@dbretainunit  = &#8216;days&#8217;,<br />
@dbretainval   = 1,<br />
@rptretainunit = &#8216;weeks&#8217;,<br />
@rptretainval  = 1,<br />
@report        = 1</em></p>
<p><em><br />
exec expressmaint<br />
@database      = &#8216;ALL_USER&#8217;,<br />
@optype        = &#8216;LOG&#8217;,<br />
@backupfldr    = &#8216;c:\ocsbackup&#8217;,<br />
@reportfldr    = &#8216;c:\reports&#8217;,<br />
@verify        = 0,<br />
@dbretainunit  = &#8216;days&#8217;,<br />
@dbretainval   = 1,<br />
@rptretainunit = &#8216;days&#8217;,<br />
@rptretainval  = 1,<br />
@report        = 1</em></p>
<p>All of our OCS Databases are User Databases, not System Databases.  We can see this using SQL Server Management Studio which is not installed by default but can be downloaded from <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&amp;displaylang=en">here</a>.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_03.jpg" alt="" width="283" height="131" /></p>
<p><strong>Note</strong>: Keep in mind that we&#8217;re not using the default SQL Express instance of SQLExpress.  The OCS Front End Standard install will create and utilize an instance of RTC.</p>
<p>We now have our .SQL file created.  We&#8217;ll go ahead and create a new .bat file called ocssqlbackup.bat.  This batch file will run the following command:</p>
<div style="background-color: #dddddd;" dir="ltr">
<div style="background-color: #dddddd;" dir="ltr">
<p>&#8220;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe&#8221; -S.\RTC -i &#8220;c:\OCSBackup\ocssqlbackup.sql&#8221;</p>
</div>
</div>
<p>This won&#8217;t work just yet.  You can see in the .SQL file, it&#8217;s calling the stored procedure &#8220;expressmaint.&#8221;  We need to create this stored procedure within SQL.  SQLDBATips has the vbscript code in order to do that <a href="http://www.sqldbatips.com/displaycode.asp?ID=26">here</a>.  You take this code and save it as storemaint.sql.  Then run the following code:</p>
<div style="background-color: #dddddd;" dir="ltr">
<div style="background-color: #dddddd;" dir="ltr">
<p>&#8220;C:\Program Files (x86)\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe&#8221; -S .\RTC -i c:\ocsbackup\expressmaint.sql</p>
</div>
</div>
<p><strong>Note</strong>: The website that shows these instructions specify the -S.\ as -S.\SQLExpress.  Again, we&#8217;re not using the SQLExpress instance, but rather the RTC instance.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_04.jpg" alt="" width="829" height="329" /></p>
<p>You can delete the expressmain.sql file now.  This is a permanent change in our instance and we won&#8217;t need to run the expressmain.sql script again.</p>
<p>We should now be able to run our SQL backup batch file as our .sql command that specifies our databases and logs has been created and our batch file to call sqlcmd.exe to execute our .sql file has been created.</p>
<p>We can see our ocssqlbackup.bat file successfully runs and creates backups of our databases.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_05.jpg" alt="" width="675" height="539" /></p>
<h3>Scheduled Tasks</h3>
<p>We obviously want to keep backing up our databases every night in case something goes wrong.  We&#8217;ll create two scheduled tasks.  One that runs ocsbackup.bat for our global, pool, and machine specific information.  And the other that runs our SQL Backups.</p>
<p>I am launching the Task Scheduler from Server Manager (I am using Server 2008 but you can access Task Scheduler on Windows 2003 by going to Control Panel).</p>
<p>Create a Basic Task and give it a name.  We&#8217;ll name this OCS Backup.  Click <strong>Next </strong>to <strong>Continue</strong>.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_06.jpg" alt="" width="700" height="481" /></p>
<p>Specify how often you want the task to run.  I typically run it Daily. Utilize whatever method works best for your organization. Click <strong>Next </strong>to <strong>Continue</strong>.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_07.jpg" alt="" width="700" height="482" /></p>
<p>Choose what time the Daily Task will run.  Again, choose whatever time works best for your organization. Click <strong>Next </strong>to <strong>Continue</strong>.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_08.jpg" alt="" width="700" height="221" /></p>
<p>We&#8217;ll want to run the script.  Because of this, choose &#8220;Start a program.&#8221; Click <strong>Next </strong>to <strong>Continue</strong>.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_09.jpg" alt="" width="700" height="240" /></p>
<p>Specify the path to our batch file. Click <strong>Next </strong>to <strong>Continue</strong>. Review the Settings and then <strong>Click Finish</strong>.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_10.jpg" alt="" width="700" height="240" /></p>
<p>You can then forcefully run the Scheduled Task to ensure it runs.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_11.jpg" alt="" width="457" height="231" /></p>
<p>Now don&#8217;t forget to create the second scheduled task to run the batch file for SQL Backups!</p>
<p>Your OCSBackup folder should look something like this after your scheduled tasks run and your data is backed up.</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_13.jpg" alt="" width="676" height="298" /></p>
<h3>Backing up your data to a remote Backup Server</h3>
<p>Now what good is having all this data backed up onto the OCS File System if OCS crashes?  No good!  We&#8217;ll still want to take your backup system and back up all these files including the OCS Standard Edition File Shares.  Now keep in mind that you will want to back up all of these files at some time after your batch files are set to run in Scheduled Tasks.  For example, my Scheduled Tasks are set to run at 8pm.  The batch files do not take long to run.  You can have your backup set to run at 8:30pm or 9:00pm.  Be sure to test and validate this is working as intended and you are getting successful backups.</p>
<p>The Standard Edition File Shares you will want to backup include:</p>
<p><img class="alignnone" src="http://www.shudnow.net/images/OCSFEBackup_12.jpg" alt="" width="661" height="1001" /></p>
<p>So to sum it up, you will want back up all the above file locations and your OCSBackup folder.  Backing up your Reports folder is optional. But again, keep in mind you will want to run this file level backup after all your Scheduled Tasks are successfully run.</p>
<img src="http://www.shudnow.net/?ak_action=api_record_view&id=1586&type=feed" alt="" /><p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.shudnow.net/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.shudnow.net/2010/01/18/ocs-2007-r2-standard-edition-front-end-automated-backups/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
