<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://theessentialexchange.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Michael&amp;#39;s meanderings...</title><link>http://theessentialexchange.com/blogs/michael/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Exchange 2010 Service Pack 1 and Required Hotfixes</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/08/30/exchange-2010-service-pack-1-and-required-hotfixes.aspx</link><pubDate>Mon, 30 Aug 2010 15:10:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:6951</guid><dc:creator>michael</dc:creator><slash:comments>0</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/08/30/exchange-2010-service-pack-1-and-required-hotfixes.aspx#comments</comments><description>&lt;p&gt;As you are probably aware, Exchange 2010 service pack 1 was released last week,&amp;nbsp;on the Internet&amp;nbsp;(a so-called RTW [release to web] by Microsoft) at the &lt;a title="Microsoft Exchange Team Blog" href="http://msexchangeteam.com/" target="_blank"&gt;Microsoft Exchange Team Blog&lt;/a&gt;. The release posting was &lt;a title="The Future of Exchange Starts Here: Exchange Server 2010 SP1 is Now Available" href="http://msexchangeteam.com/archive/2010/08/25/455861.aspx" target="_blank"&gt;The Future of Exchange Starts Here: Exchange Server 2010 SP 1 Is Now Available&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In my opinion, SP1 represents Exchange 2010 as it &amp;quot;should have been&amp;quot; at its original release. You can finally control RBAC (Role Based Access Control) in the GUI, Retention Policies now work properly &lt;strong&gt;and &lt;/strong&gt;can be controlled in the GUI, common DAG options are now available in GUI, themes are available in OWA; plus a large number of bug fixes and other improved feature content. You can read the article about &lt;a title="What&amp;#39;s New in Exchange 2010 SP1" href="http://technet.microsoft.com/en-us/library/ff459257.aspx" target="_blank"&gt;What&amp;#39;s New in Exchange 2010 SP1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, along with this has come some controversy. You &lt;strong&gt;cannot&lt;/strong&gt; install Exchange 2010 SP1 without first installing a handful of hotfixes. This is a hard-block in the Exchange setup program, which means that if the hotfixes are not detected, the setup program will abort. The list of hotfixes are available in the article &lt;a title="Exchange 2010 SP1 Prerequisites" href="http://technet.microsoft.com/en-us/library/bb691354.aspx" target="_blank"&gt;Exchange 2010 SP1 Prerequisites&lt;/a&gt;&amp;nbsp;and if you don&amp;#39;t have them installed, the Exchange setup program also informs you of this and tells you where to get them.&lt;/p&gt;
&lt;p&gt;Now, this is a first for Exchange setup. In the past, Exchange may have required a particular service pack and/or OS version, but not specific hotfixes. The issue with hotfixes are, as I see it, three:&lt;/p&gt;
&lt;p&gt;[1] They must be individually requested,&lt;/p&gt;
&lt;p&gt;[2] There is confusion about which specific hotfix to get (you will always need the x64 version, and if you are running on Windows Server 2008 SP2 then you get the Vista version; if you are running on Windows Server 2008 R2, then you get the Windows 7 version), and&lt;/p&gt;
&lt;p&gt;[3] Hotfixes are not fully regression tested and should &amp;quot;only be installed on computers experiencing this particular problem&amp;quot;.&lt;/p&gt;
&lt;p&gt;It is this last one that makes people stop and say &amp;quot;whoa!&amp;quot; But it shouldn&amp;#39;t.&lt;/p&gt;
&lt;p&gt;Microsoft has required this configuration. Microsoft supports this configuration. Don&amp;#39;t make it an issue, because it isn&amp;#39;t.&lt;/p&gt;
&lt;p&gt;Hotfixes are not fully regression tested because they are designed to fix a specific issue in a specific module of a specific piece of software. It does not make sense to go through a full service-pack set of testing for a single fix. Also, Microsoft has been running millions of mailboxes on this codebase (in their Live@Edu environment) for quite some time, as well as over half-million TAP customer mailboxes. These fixes &lt;strong&gt;have&lt;/strong&gt; been tested in production environments and Microsoft&lt;strong&gt; does&lt;/strong&gt; support them.&lt;/p&gt;
&lt;p&gt;In my opinion, Microsoft &lt;strong&gt;should require&lt;/strong&gt; these hotfixes. If Microsoft is aware of a particular problem and a fix is available for that problem - then I believe they should require that fix. I don&amp;#39;t want an Exchange service pack released with known issues that are going to affect the end-user customer stability of the service pack.&lt;/p&gt;
&lt;p&gt;There is some question about why these fixes aren&amp;#39;t available on WSUS or Microsoft Update; and the answer is simple: these are not security related fixes, they are not Exchange fixes, and they will not affect every single Microsoft server installation. However, they &lt;strong&gt;are&lt;/strong&gt; known to affect Exchange and thus need to be installed on Exchange servers.&lt;/p&gt;
&lt;p&gt;My only&amp;nbsp;complaint about the process is the naming of the hotfixes. Installing a &amp;quot;Windows 7&amp;quot; hotfix on a &amp;quot;Server 2008 R2&amp;quot; computer makes sense to me - but it doesn&amp;#39;t to the average system administrator. The same is true for installing a &amp;quot;Vista&amp;quot; hotfix on a &amp;quot;Server 2008 Service Pack 2&amp;quot; computer.&lt;/p&gt;
&lt;p&gt;So...feel safe. You have the warm-and-fuzzy you want. Microsoft fully supports the deployment of these hotfixes on an Exchange server.&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=6951" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Upgrade_2F00_Migration/default.aspx">Upgrade/Migration</category></item><item><title>Generating a report on Distribution Groups and their Membership</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/08/18/generating-a-report-on-distribution-groups-and-their-membership.aspx</link><pubDate>Wed, 18 Aug 2010 20:22:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:6950</guid><dc:creator>michael</dc:creator><slash:comments>0</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/08/18/generating-a-report-on-distribution-groups-and-their-membership.aspx#comments</comments><description>&lt;p&gt;A common request is to get a list of all distribution groups and the members contained in that distribution group. The question came up on a mailing list I frequent today, and my initial response was a PowerShell &amp;quot;one-liner&amp;quot; (actually five lines, but all a single PowerShell statement).&lt;/p&gt;
&lt;p&gt;The one-liner worked, but it had a couple of limitations: it wasn&amp;#39;t very pretty (that is, the output was formatted poorly) and if there were than one user set to manage the distribution group, that would be reportedly incorrectly. It was also slower than it had to be.&lt;/p&gt;
&lt;p&gt;Note: a distribution group may &lt;strong&gt;also&lt;/strong&gt; be a security group. From an Exchange Server perspective, the important thing is whether the group is mail-enabled or not.&lt;/p&gt;
&lt;p&gt;So, I took that five-liner, cleaned it up, fixed the ManagedBy reporting bug, and sped it up (by using an embedded pipeline to report on the members contained in a distribution group). That turned it into a 50+ line script (which includes 10 lines of comments!). As I said on the mailing list - you can generate quick results with PowerShell. That&amp;#39;s good enough for most admins. But if you want it pretty and &amp;quot;production quality&amp;quot; then it&amp;#39;s going to take a little more time.&lt;/p&gt;
&lt;p&gt;You can take this report and pipe it to out-string in order to save the output to a disk file. Then you can inspect the file later, email it, copy-n-paste it, whatever you want.&lt;/p&gt;
&lt;p&gt;Here is the script:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;&lt;pre&gt;##
## Report-DistributionGroupsAndMembers.ps1
&lt;font color="red"&gt;## v1.1
&lt;/font&gt;
##
## Michael B. Smith
## http://TheEssentialExchange.com
## August, 2010
##
## Requires Exchange Management Shell
## Should work with either PowerShell v1 or v2
&lt;font color="red"&gt;## Tested on both Exchange 2007 and Exchange 2010
&lt;/font&gt;
##

function formatManager($formatstring, $manager)
{
	$formatstring -f $manager.Name, ($manager.Parent.ToString() + &amp;quot;/&amp;quot; + $manager.RDN.ToString().SubString(3))
}

Get-DistributionGroup -ResultSize Unlimited |% {
	$group = $_
	&amp;quot;Group Name &amp;amp; Identity: {0}, {1}&amp;quot; -f $group.Name, $group.Identity
	$managedBy = $group.ManagedBy
&lt;font color="red"&gt;	if( $managedBy -is [Microsoft.Exchange.Data.Directory.ADObjectId] )
	{
		formatManager &amp;quot;Group manager: {0}, {1}&amp;quot; $managedBy
	}
	else&lt;/font&gt;if( $managedBy.Count -gt 1 )
	{
		[bool]$first = $true
		foreach( $manager in $managedBy ) 
		{
			if( $first ) 
			{
				formatManager &amp;quot;Group managers: {0}, {1}&amp;quot; $manager
				$first = $false
			}
			else
			{
				formatManager &amp;quot;                {0}, {1}&amp;quot; $manager
			}
		}
	}
	elseif( $managedBy.Count -gt 0 )
	{
		formatManager &amp;quot;Group manager: {0}, {1}&amp;quot; $managedBy[0]
	}

	&amp;quot;Members:&amp;quot;
	Get-DistributionGroupMember -Identity $group.Identity -ResultSize Unlimited |% {
		foreach( $member in $_ )
		{
			&amp;quot;`t$($member.Name)&amp;quot;
		}
	}
	&amp;quot;---&amp;quot;
}
&lt;/pre&gt;&lt;/font&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;--Edit on August 20, 2010&lt;br /&gt;The original script&amp;nbsp;would not display ManagedBy&amp;nbsp;on Exchange 2007 (I&amp;#39;m running Exchange 2010). This is because ManagedBy in Exchange 2010 always returns an array-type object (it can contain multiple users). In Exchange 2007, the ManagedBy value is always a singleton. The required changes to the script are in red.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#ff0000"&gt;Michael B.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=6950" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Script/default.aspx">Script</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Using PowerShell to determine your elevation status (UAC)</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/08/17/using-powershell-to-determine-your-elevation-status-uac.aspx</link><pubDate>Tue, 17 Aug 2010 18:23:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:6949</guid><dc:creator>michael</dc:creator><slash:comments>0</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/08/17/using-powershell-to-determine-your-elevation-status-uac.aspx#comments</comments><description>&lt;p&gt;On a mailing list recently, SBS author and PowerShell MVP Charlie Russel posted how he used PowerShell to check whether a given PowerShell session was elevated. He also used that information to change the background color of the session (elevated shells are dangerous things!).&lt;/p&gt;
&lt;p&gt;I took Charlie&amp;#39;s code and expanded it a bit and &amp;quot;made it mine&amp;quot;. I often need to know whether I&amp;#39;m running as an administrator, a server operator, and/or a backup operator. This is because I write lots of Exchange PowerShell scripts (which often require server operator or local administrator privileges) and backup PowerShell scripts (which require the user running the script to be a backup operator). The same technique Charlie used can also be used to determine those things. The key element here is the IsInRole() method of System.Security.Principal.WindowsPrincipal. For detailed information about that .Net class, google/bing for System.Security.Principal.WindowsPrincipal.&lt;/p&gt;
&lt;p&gt;The IsInRole() method operates against a WindowsIdentity object. This is obtained from the current process.&lt;/p&gt;
&lt;p&gt;The script is pretty self-explanatory. It is designed to be dot-sourced so the functions can be used within your current script. I&amp;#39;ve also included Charlie&amp;#39;s functionality for changing the background of an elevated shell session.&lt;/p&gt;
&lt;p&gt;Without further ado....&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;&lt;pre&gt;##
## IsProtectedRole.ps1
##
## Contains functions for identifying protected roles the current user has tokens for.
##
## Intended for dot-sourcing.
##
## based on code from Charlie Russell (www.scribes.com).
##

$identity  = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$principal = New-Object System.Security.Principal.WindowsPrincipal( $identity )

##
## Starting with Vista/Server2008, if UAC is enabled, then a user who has either direct
## or indirect membership in the BuiltIn\Administrators group is assigned not one but
## TWO security tokens. One of those tokens has the administrator privilege, and one
## does not. In order for you to have administrator privilege in PowerShell, you must
## start the PowerShell session from: &lt;img src="http://theessentialexchange.com/emoticons/emotion-13.gif" alt="Angel" /&gt; another elevated shell (either PowerShell or
## cmd.exe), or &lt;img src="http://theessentialexchange.com/emoticons/emotion-22.gif" alt="Beer" /&gt; elevate the session when you start the shell (i.e., &amp;quot;Run As Administrator&amp;quot;).
##

function IsAdministrator
{
	$principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::Administrator )
}

function IsUser
{
	$principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::User )
}

function IsPowerUser
{
	$principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::PowerUser )
}

function IsGuest
{
	$principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::Guest )
}

function IsAccountOperator
{
	$principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::AccountOperator )
}

function IsSystemOperator
{
	$principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::SystemOperator )
}

function IsPrintOperator
{
	$principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::PrintOperator )
}

function IsBackupOperator
{
	$principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::BackupOperator )
}

function IsReplicator
{
	$principal.IsInRole( [System.Security.Principal.WindowsBuiltInRole]::Replicator )
}

function MarkAdministratorShell
{
	If (IsAdministrator)
	{
		$script:effectivename = &amp;quot;Administrator&amp;quot;
		$host.UI.RawUI.Backgroundcolor = &amp;quot;DarkRed&amp;quot;
		$host.UI.RawUI.Foregroundcolor = &amp;quot;White&amp;quot;
	}
	else
	{
		$script:effectivename = $identity.name
		$host.UI.RawUI.Backgroundcolor = &amp;quot;White&amp;quot;
		$host.UI.RawUI.Foregroundcolor = &amp;quot;DarkBlue&amp;quot;
	}

	clear-host
}

# write-host &amp;#39;Administrator&amp;#39; (IsAdministrator)
# write-host &amp;#39;User&amp;#39; (IsUser)
# write-host &amp;#39;PowerUser&amp;#39; (IsPowerUser)
# write-host &amp;#39;Guest&amp;#39; (IsGuest)
# write-host &amp;#39;AccountOperator&amp;#39; (IsAccountOperator)
# write-host &amp;#39;SystemOperator&amp;#39; (IsSystemOperator)
# write-host &amp;#39;PrintOperator&amp;#39; (IsPrintOperator)
# write-host &amp;#39;BackupOperator&amp;#39; (IsBackupOperator)
# write-host &amp;#39;Replicator&amp;#39; (IsReplicator)
&lt;/pre&gt;&lt;/font&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=6949" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Script/default.aspx">Script</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>BlackBerry Enterprise Express (BES/X) on an Exchange Server and/or Domain Controller</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/08/16/blackberry-enterprise-express-bes-x-on-an-exchange-server-and-or-domain-controller.aspx</link><pubDate>Mon, 16 Aug 2010 23:31:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:6948</guid><dc:creator>michael</dc:creator><slash:comments>0</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/08/16/blackberry-enterprise-express-bes-x-on-an-exchange-server-and-or-domain-controller.aspx#comments</comments><description>&lt;p&gt;I recently provided input to &lt;a title="Author information for Mariette Knap" href="http://www.smallbizserver.net/Articles/tabid/266/articleType/AuthorView/authorID/1441/MarietteKnap.aspx" target="_blank"&gt;Marriette Knap&lt;/a&gt;, a Small Business Server MVP, in a blog posting of her&amp;#39;s called &lt;a title="Installing BES/X on SBS 2008" href="http://www.smallbizserver.net/Articles/tabid/266/Id/343/How-to-install-BlackBerry-Enterprise-Server-Express-on-a-SBS-2008.aspx"&gt;How to install BlackBerry Enterprise Server Express on a SBS 2008&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I believe that this posting&amp;nbsp;is the best resource for installing BES/X available right now; whether you are installing BES/X on an Exchange Server, on a Domain Controller/Group Catalog server, or on a standalone server.&lt;/p&gt;
&lt;p&gt;If you are installing BES/X on a DC/GC or directly on an Exchange server, I highly recommend you follow the instructions contained in that blog post.&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=6948" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/SBS/default.aspx">SBS</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/BES_2F00_X/default.aspx">BES/X</category></item><item><title>Exchange Email Address Template Objects in PowerShell</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/07/19/exchange-email-address-template-objects-in-powershell.aspx</link><pubDate>Mon, 19 Jul 2010 18:32:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:6947</guid><dc:creator>michael</dc:creator><slash:comments>0</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/07/19/exchange-email-address-template-objects-in-powershell.aspx#comments</comments><description>&lt;p&gt;Exchange has a very rich set of objects which are used and created by the various Exchange cmdlets. Unfortunately, these objects (excepting those used by Exchange Web Services) are poorly documented - and the documentation which is available is often incorrect or misleading.&lt;/p&gt;
&lt;p&gt;I ran into that problem this past week.&lt;/p&gt;
&lt;p&gt;To understand my particular issue, let&amp;#39;s review a little history. Exchange 2000 and Exchange 2003 didn&amp;#39;t have the concept of individual &amp;quot;accepted domains&amp;quot;. Instead, you usually used Recipient Policies to identify the accepted domains. Recipient Policies were also used to create and manage Mailbox Manager policies.&lt;/p&gt;
&lt;p&gt;In Exchange 2007, all of the capabilities of Recipient Policies were split into multiple features: Accepted Domains, E-mail Address Policies, and&amp;nbsp;Managed Folder Mailbox policies. In Exchange 2010, Managed Folder Mailbox&amp;nbsp;policies have been deprecated and replaced by Retention Policies.&lt;/p&gt;
&lt;p&gt;However, some capabilities of these features are not available in the Exchange 2007/2010 GUI (but were in the Exchange 2000/2003 GUI). One of these hidden features is to have both enabled and disabled address templates in an E-Mail Address Policy. In the case of a disabled address template, a particular e-mail address domain can be manually assigned to a given Exchange object but that e-mail address domain will not be automatically assigned even if the object otherwise meets the requirements of the recipient filter assigned to the E-Mail Address Policy (such as a company name, a conditional attribute, group membership, etc.).&lt;/p&gt;
&lt;p&gt;Whew.&lt;/p&gt;
&lt;p&gt;So what happens when you need to disable an existing e-mail address template?&lt;/p&gt;
&lt;p&gt;Well, you do it in PowerShell. (Long lead up to an obvious response, right?) And you do it with the obvious PowerShell cmdlet: &lt;font face="courier new,courier"&gt;Set-EmailAddressPolicy&lt;/font&gt;.&lt;/p&gt;
&lt;p&gt;What would &lt;strong&gt;seem&lt;/strong&gt; to make sense that the command would be something like:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;Set-EmailAddressPolicy &amp;#39;Default Policy&amp;#39; -Add -DisabledEmailAddressTemplates &amp;#39;@example.com&amp;#39; &lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;...but that doesn&amp;#39;t work. Aside from the fact that there is no Add or Remove parameter to Set-EmailAddressPolicy, you will eventually figure out that whatever value is provided to the EnabledEmailAddressTemplates and the DisabledEmailAddressTemplates parameters &lt;strong&gt;overwrite&lt;/strong&gt; the values previously there. Well, ain&amp;#39;t that a kick?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;To change an address template collection, you must modify the existing collection and resubmit the modified value to &lt;font face="courier new,courier"&gt;Set-EmailAddressPolicy&lt;/font&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So what&amp;#39;s the problem? The problem is the type of the required argument. The EnabledEmailAddressTemplates and DisabledEmailAddressTemplates parameters take a parameter of type Microsoft.Exchange.Data.ProxyAddressTemplateCollection. This is an enumerated collection (a fancy name for an array that you can use with a foreach(), or index it, or use the Item() method to access elements of the collection). Individual items of the collection are of type Microsoft.Exchange.Data.ProxyAddressTemplate or Microsoft.Exchange.Data.SmtpProxyAddressTemplate.&lt;/p&gt;
&lt;p&gt;To add or remove items from the collection, you use the normal methods available to collections - that is, the Add() and Remove() methods. However, to use the Add() or Remove() methods, you need to have an object of type Microsoft.Exchange.Data.ProxyAddressTemplate or of type Microsoft.Exchange.Data.SmtpProxyAddressTemplate.&lt;/p&gt;
&lt;p&gt;How the heck do you get one of those?&lt;/p&gt;
&lt;p&gt;In general, with .Net objects, you create objects using a constructor. In PowerShell, that translates to the New-Object cmdlet. So my normal process is to begin by using Google/Bing to search for the object name. The first or second hit is usually the MSDN web page that describes the class. Then, I read the page, find the appropriate constructor and &lt;strong&gt;bam!&lt;/strong&gt; I am done. This is the method I followed in an earlier article: &lt;a title="More Multi-valued Parameters in PowerShell" href="http://theessentialexchange.com/blogs/michael/archive/2009/04/07/more-multi-valued-parameters-in-powershell-sourcetransportservers-in-set-sendconnector.aspx" target="_blank"&gt;More Multi-valued Parameters in PowerShell (SourceTransportServers in Set-SendConnector)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But it doesn&amp;#39;t always work. I refer you back to the first paragraph. Many Exchange objects are poorly documented and the documentation that is present is often wrong. As an exercise, I invite you to Google/Bing the objects we are interested in today: Microsoft.Exchange.Data.ProxyAddressTemplate or Microsoft.Exchange.Data.SmtpProxyAddressTemplate. Read the MSDN web pages for the class, especially the page on constructors.&lt;/p&gt;
&lt;p&gt;Once you&amp;#39;ve done that reading, you&amp;#39;ll try this:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;$template = New-Object Microsoft.Exchange.Data.ProxyAddressTemplate(&amp;#39;smtp&amp;#39;, &amp;#39;@example.com&amp;#39;) &lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;which will not work. Then you&amp;#39;ll try:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;$template = New-Object Microsoft.Exchange.Data.ProxyAddressTemplate(&amp;#39;smtp:@example.com&amp;#39;) &lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;which also will not work. Then you&amp;#39;ll try to get a raw object:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;$template = New-Object Microsoft.Exchange.Data.ProxyAddressTemplate &lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;which again will not work.&lt;/p&gt;
&lt;p&gt;Then, if you are like me, you&amp;#39;ll spend the next couple of hours banging your head against the wall getting nowhere. After sleeping on the problem, I did come up with a very unsatisfying work-around. Since, in this case, we are trying to take a &amp;quot;currently enabled&amp;quot; object and make it disabled, we should be able to use a reference to the existing object. That solution looks like the below: &lt;/p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;&lt;pre&gt;	$template = &amp;#39;@example.com&amp;#39;

	$policy = Get-EmailAddressPolicy &amp;#39;Default Policy&amp;#39;

	$EnabledAddresses  = $policy.EnabledEmailAddressTemplates
	$DisabledAddresses = $policy.DisabledEmailAddressTemplates

	$objTemplate = $null

	foreach ($addr in $EnabledAddresses)
	{
		if ( $addr.AddressTemplateString -ieq $template )
		{
			&amp;quot;found $template&amp;quot;
			$objTemplate = $addr
			break
		}
		&amp;quot;skipped &amp;quot; + $addr.AddressTemplateString
	}

	if ( $objTemplate )
	{
		$EnabledAddresses.Remove( $objTemplate )
		$DisabledAddresses.Add( $objTemplate )

		$policy |
			Set-EmailAddressPolicy -EnabledEmailAddressTemplates $EnabledAddresses `
					       -DisabledEmailAddressTemplates $DisabledAddresses
	}
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;That, however, is a kludgey hack. In the above solution, we are using a reference to an existing object to change the policies. That will not work in many use-cases; for example where you want to add a new address template, whether enabled or disabled. You will find that you can&amp;#39;t modify the objects returned from Get-EmailAddressPolicy - they are marked read-only.&lt;/p&gt;
&lt;p&gt;So, I asked some people who know a lot more about PowerShell than I. &lt;a title="Shay Levy&amp;#39;s blog" href="http://blogs.microsoft.co.il/blogs/ScriptFanatic" target="_blank"&gt;Shay Levy, a PowerShell MVP&lt;/a&gt;, pointed out that I was making it too hard and that this works:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;$objTemplate = [Microsoft.Exchange.Data.ProxyAddressTemplate]&amp;#39;smtp:@example.com&amp;#39; &lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;So, I slapped myself upside the head and said &amp;quot;Of course! ::Parse() is also a hidden constructor!&amp;quot; What that means, in English, is that the above statement is equivalent to:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;$objTemplate = [Microsoft.Exchange.Data.ProxyAddressTemplate]::Parse( &amp;#39;smtp:@example.com&amp;#39; ) &lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;and to:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;$objTemplate = &amp;#39;smtp:@example.com&amp;#39; -as [Microsoft.Exchange.Data.ProxyAddressTemplate] &lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;PowerShell has a built-in capability, using a static method on an object, to take a string and attempt to coerce that string into the named object. In this case, a Microsoft.Exchange.Data.ProxyAddressTemplate. That static method must be named Parse() for PowerShell to automatically use the capability. You can see the static methods on this class using the below command:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;[Microsoft.Exchange.Data.ProxyAddressTemplate] | Get-Member -static &lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;Oisin Grehan, another PowerShell MVP, also pointed out that this is a perfect opportunity to use a filter. A filter is a PowerShell feature, somewhat uncommonly used, for processing objects in the pipeline. For example, to define a couple of useful filters:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;&lt;pre&gt;	filter ConvertTo-ProxyAddressTemplate
	{
		$_ -as [Microsoft.Exchange.Data.ProxyAddressTemplate]
	}

	filter ConvertTo-SmtpProxyAddressTemplate
	{
		$_ -as [Microsoft.Exchange.Data.SmtpProxyAddressTemplate]
	}
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;These filters would take input from the pipeline and convert the pipeline input into the desired objects. For example:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;&lt;pre&gt;	[PS] C:\S&amp;gt;&amp;#39;@example.com&amp;#39;, &amp;#39;@sub1.example.com&amp;#39;, &amp;#39;@sub2.example.com&amp;#39; | ConvertTo-SmtpProxyAddressTemplate

	AddressTemplateString      : @example.com
	ProxyAddressTemplateString : smtp:@example.com
	Prefix                     : SMTP
	IsPrimaryAddress           : False
	PrefixString               : smtp

	AddressTemplateString      : @sub1.example.com
	ProxyAddressTemplateString : smtp:@sub1.example.com
	Prefix                     : SMTP
	IsPrimaryAddress           : False
	PrefixString               : smtp

	AddressTemplateString      : @sub2.example.com
	ProxyAddressTemplateString : smtp:@sub2.example.com
	Prefix                     : SMTP
	IsPrimaryAddress           : False
	PrefixString               : smtp
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;So, given what we know now, what does the script look like? There are some similarities, but now it doesn&amp;#39;t feel like a hack and it is much easier to read and understand:&lt;/p&gt;
&lt;p&gt;&lt;font color="green"&gt;
&lt;blockquote&gt;&lt;pre&gt;	$objTemplate = &amp;#39;@example.com&amp;#39; | ConvertTo-SmtpProxyAddressTemplate

	$policy = Get-EmailAddressPolicy &amp;#39;Default Policy&amp;#39;

	$EnabledAddresses  = $policy.EnabledEmailAddressTemplates
	$DisabledAddresses = $policy.DisabledEmailAddressTemplates

	$EnabledAddresses.Remove( $objTemplate )
	$DisabledAddresses.Add( $objTemplate )

	$policy |
		Set-EmailAddressPolicy -EnabledEmailAddressTemplates $EnabledAddresses `
				       -DisabledEmailAddressTemplates $DisabledAddresses
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/font&gt;
&lt;p&gt;So, what is the lesson learned? Don&amp;#39;t forget about ::Parse()! And, as almost always, in PowerShell there is often more than one way to skin a cat.&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=6947" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Script/default.aspx">Script</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Antivirus Exclusions and Windows</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/06/16/antivirus-exclusions-and-windows.aspx</link><pubDate>Wed, 16 Jun 2010 22:21:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:6941</guid><dc:creator>michael</dc:creator><slash:comments>0</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/06/16/antivirus-exclusions-and-windows.aspx#comments</comments><description>&lt;p&gt;In December of 2007, I made two posts: &lt;a title="File Level Antivirus for Exchange" href="http://theessentialexchange.com/blogs/michael/archive/2007/12/05/file-level-antivirus-for-exchange.aspx" target="_blank"&gt;File Level Antivirus for Exchange&lt;/a&gt; and &lt;a title="Information Store Antivirus for Exchange" href="http://theessentialexchange.com/blogs/michael/archive/2007/12/02/information-store-antivirus-for-exchange.aspx" target="_blank"&gt;Information Store Antivirus for Exchange&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Since that time, there is no question that with Exchange 2007 and Exchange 2010 (and the ongoing advancement of various Internet-based threats and malware), that the focus has moved to scanning incoming and outgoing emails with a gateway server and maintaining antivirus at the file level and not at the mailbox database (or Information Store) level.&lt;/p&gt;
&lt;p&gt;Recently on Technet, &lt;a title="Jeff Stoke&amp;#39;s &amp;quot;about&amp;quot; information" href="http://blogs.technet.com/b/jeff_stokes/about.aspx" target="_blank"&gt;Jeff Stokes&lt;/a&gt;, a PFE (Premiere Field Engineer) with Microsoft, published an updated list of ALL the antivirus exclusions that are current for various Microsoft products; both updating and going far beyond my posts in 2007.&lt;/p&gt;
&lt;p&gt;The article is: &lt;a title="Anti-Virus Exclusions and You" href="http://blogs.technet.com/b/jeff_stokes/archive/2010/05/19/anti-virus-exclusions-and-you.aspx" target="_blank"&gt;Anti-Virus Exclusions and You&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are configuring any infrastructure server, you need to examine his list and ensure that your anti-virus adheres to the recommendations noted therein.&lt;/p&gt;
&lt;p&gt;I did have minor input to this article for mentioning the relevant, current Exchange links.&lt;/p&gt;
&lt;p&gt;An interesting possible project is to write a PowerShell script to check all of these various items for a given computer. That might be fun!&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=6941" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Active+Directory/default.aspx">Active Directory</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Script/default.aspx">Script</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Windows/default.aspx">Windows</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/IIS/default.aspx">IIS</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Project/default.aspx">Project</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Registry/default.aspx">Registry</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/DNS/default.aspx">DNS</category></item><item><title>Unified Communications (Exchange, OCS) Load Balancer Information</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/06/01/unified-communications-exchange-ocs-load-balancer-information.aspx</link><pubDate>Tue, 01 Jun 2010 17:14:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:6925</guid><dc:creator>michael</dc:creator><slash:comments>0</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/06/01/unified-communications-exchange-ocs-load-balancer-information.aspx#comments</comments><description>&lt;p&gt;Microsoft has finally released detailed documentation regarding load balancing with both Exchange Server 2010 and OCS 2007 R2. There are three VERY interesting documents available that you should give a read.&lt;/p&gt;
&lt;p&gt;They are:&lt;/p&gt;
&lt;blockquote&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;a title="Understanding Load Balancing in Exchange 2010" href="http://technet.microsoft.com/en-us/library/ff625247.aspx" target="_blank"&gt;Understanding Load Balancing in Exchange 2010&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;a title="Load Balancing requirements of Exchange Protocols" href="http://technet.microsoft.com/en-us/library/ff625248.aspx" target="_blank"&gt;Load Balancing Requirements of Exchange Protocols&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;a title="Unified Communications Hardware Load Balancer Deployment" href="http://technet.microsoft.com/en-us/office/ocs/cc843611.aspx" target="_blank"&gt;Microsoft Unified Communications Hardware Load Balancer Deployment&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/blockquote&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;
&lt;p&gt;***Edit on June 4, 2010 - correct spacing between articles in list.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=6925" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category></item><item><title>Exchange 2010 Gotcha - #5</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/05/28/exchange-2010-gotcha-5.aspx</link><pubDate>Sat, 29 May 2010 00:06:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:6202</guid><dc:creator>michael</dc:creator><slash:comments>0</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/05/28/exchange-2010-gotcha-5.aspx#comments</comments><description>&lt;p&gt;You may - or may not - need to register Filter Packs after you install them.&lt;/p&gt;
&lt;p&gt;As a prerequsite for installing Exchange 2010, you must install the &lt;a title="Office 2007 Filter Packs" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=60c92a37-719c-4077-b5c6-cac34f4227cc" target="_blank"&gt;Office 2007 Filter Packs&lt;/a&gt;. As noted in a recent blog post of mine, &lt;a title="Office 2010 Filter Pack for Exchange 2007 and Exchange 2010" href="http://theessentialexchange.com/blogs/michael/archive/2010/05/19/office-2010-filter-pack-for-exchange-2007-and-exchange-2010.aspx"&gt;Office 2010 Filter Pack for Exchange 2007 and Exchange 2010&lt;/a&gt;, the Office 2010 Filter Pack was recently released. After installing Exchange 2010, you can upgrade to the Office 2010 version of the filter pack (and this is also supported for Exchange 2007).&lt;/p&gt;
&lt;p&gt;It &lt;u&gt;may be&lt;/u&gt; that Exchange 2010 SP1 will require the Office 2010 version of the filter pack.&lt;/p&gt;
&lt;p&gt;However, it has recently come to my attention that installing the filter pack, regardless of the version, does not automatically cause the filter pack files to be registered to index the affected document types by Exchange server! After surveying several of my customer&amp;#39;s Exchange servers, I determined that the set of documents that would be indexed by Exchange is dependent on what was being indexed by earlier versions of Exchange.&lt;/p&gt;
&lt;p&gt;Therefore, after installing the filter pack, you still need to Make This Happen (tm) - i.e., ensure that the filter packs are registered. &lt;img src="http://theessentialexchange.com/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;
&lt;p&gt;For Exchange 2010, the official Microsoft document is &lt;a title="Register Filter Pack iFilters with Exchange 2010" href="http://technet.microsoft.com/en-us/library/ee732397.aspx" target="_blank"&gt;Register Filter Pack IFilters with Exchange 2010&lt;/a&gt;. An improved version of the script has been created by &lt;a title="Pat Richard" href="http://www.ucblogs.net/blogs/exchange" target="_blank"&gt;Pat Richard&lt;/a&gt;, and is available &lt;a title="here" href="http://www.ucblogs.net/files/folders/powershell/entry122.aspx" target="_blank"&gt;here&lt;/a&gt;. Pat&amp;#39;s version also handles the required registration for the Adobe PDF iFilter pack, if you have downloaded and installed it.&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=6202" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Script/default.aspx">Script</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Office 2010 Filter Pack for Exchange 2007 and Exchange 2010</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/05/19/office-2010-filter-pack-for-exchange-2007-and-exchange-2010.aspx</link><pubDate>Wed, 19 May 2010 20:58:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:626</guid><dc:creator>michael</dc:creator><slash:comments>1</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/05/19/office-2010-filter-pack-for-exchange-2007-and-exchange-2010.aspx#comments</comments><description>&lt;p&gt;One of the prerequisites for both Exchange 2007 and Exchange 2010 is to install the &amp;quot;filter packs&amp;quot;. The filter packs are responsible for &amp;quot;filtering&amp;quot; the content of Microsoft Office documents and passing those contents back to the Indexing Service (ok, it&amp;#39;s not called the Indexing Service anymore - it&amp;#39;s Microsoft Search - and Exchange 2010 uses a slightly customized version of Microsoft Search called &amp;quot;Microsoft Search (Exchange)&amp;quot;).&lt;/p&gt;
&lt;p&gt;In Exchange&amp;nbsp;2003 and before, creating a full-text search index was optional - and &amp;quot;expensive&amp;quot;.&amp;nbsp; Beginning with Exchange 2007, it became cheap (due to Exchange&amp;#39;s use of the much improved Microsoft Search engine) and required. All Outlook Web App (Outlook Web Access) searches and all Outlook (online) searches use that index.&lt;/p&gt;
&lt;p&gt;So, with the release of Office 2010, Microsoft has also released an update to the filter packs that support Office 2010 (plus a few other document types). The new filter packs&amp;nbsp;can be installed on Exchange 2007 and Exchange 2010 (and it seems likely that they&amp;nbsp;will be required for Exchange 2010 SP1). Filters are built-in for the following formats:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Legacy Office Filter (97-2003; .doc, .ppt, .xls)&lt;br /&gt;Metro Office Filter (2007 and 2010; .docx, .pptx, .xlsx)&lt;br /&gt;Zip Filter&lt;br /&gt;OneNote filter&lt;br /&gt;Visio Filter&lt;br /&gt;Publisher Filter&lt;br /&gt;Open Document Format Filter&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You can download the &lt;a title="Microsoft Office 2010 Filter Packs download URL" href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=5cd4dcd7-d3e6-4970-875e-aba93459fbee" target="_blank"&gt;Microsoft Office 2010 Filter Packs&amp;nbsp;here&lt;/a&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;However, you may notice that a common file format is missing! PDF. In order to scan and index PDFs, you need to install a filter available from Adobe, the &lt;a title="Adobe PDF iFilter 9 for 64-bit platforms" href="http://www.adobe.com/support/downloads/detail.jsp?ftpID=4025" target="_blank"&gt;Adobe PDF iFilter 9 for 64-bit platforms&lt;/a&gt;. That will work with both Exchange 2007 and Exchange 2010.&lt;/p&gt;
&lt;p&gt;Bharat Suneja, an ex-Exchange MVP who is now working for Microsoft, provides additional information about index generation and scanning on his blog &lt;a title="Exchangepedia | Released: Microsoft Office 2010 Filter Packs" href="http://exchangepedia.com/2010/05/released-microsoft-office-2010-filter-packs.html"&gt;Exchangepedia&lt;/a&gt;.(He gave you some stuff I didn&amp;#39;t - and I&amp;#39;ve given you some stuff he didn&amp;#39;t. It all works out!) :-)&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=626" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Upgrade_2F00_Migration/default.aspx">Upgrade/Migration</category></item><item><title>Simplifying Life for Exchange Authors</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/05/11/simplifying-life-for-exchange-authors.aspx</link><pubDate>Tue, 11 May 2010 21:19:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:621</guid><dc:creator>michael</dc:creator><slash:comments>3</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/05/11/simplifying-life-for-exchange-authors.aspx#comments</comments><description>&lt;p&gt;Another Exchange MVP, &lt;a title="Pat Richard" href="http://ucblogs.net/blogs/exchange" target="_blank"&gt;Pat Richard&lt;/a&gt;, posted on Facebook yesterday: &lt;em&gt;It would be nice to be able to import a list of all Exchange related PowerShell cmdlets into the Word and Outlook dictionaries.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Being the helpful guy that I am, I responded: &lt;em&gt;You can do that in one-line of PowerShell.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;(That being a famous quote from Jeff Snover, one of the main men behind PowerShell at Microsoft.)&lt;/p&gt;
&lt;p&gt;Then I started thinking about it. And well, you CAN do it in one line of PowerShell. It just depends on how clever you want to get and how long a line you are willing to type! Regardless, you should only have to do it once.&lt;/p&gt;
&lt;p&gt;Now, be aware, I&amp;#39;m running Office 2010 - file locations might be somewhat different for you.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s build that one liner.&lt;/p&gt;
&lt;p&gt;First thing was to find where Word 2010 stored custom words added to the dictionary. F1 (Help)&amp;nbsp;in Word gave me that - CUSTOM.DIC.&lt;/p&gt;
&lt;p&gt;Second was to locate the physical file:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;PS C:\Users\Administrator&amp;gt; cd \&lt;br /&gt;PS C:\&amp;gt; cmd /c dir custom.dic /s&lt;br /&gt;&amp;nbsp;Volume in drive C has no label.&lt;br /&gt;&amp;nbsp;Volume Serial Number is D888-0076&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;&amp;nbsp;Directory of C:\Users\Administrator\AppData\Roaming\Microsoft\UProof&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;05/10/2010&amp;nbsp; 08:50 AM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11,902 CUSTOM.DIC&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 File(s)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11,902 bytes&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Total Files Listed:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 File(s)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11,902 bytes&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 Dir(s)&amp;nbsp; 77,055,504,384 bytes free&lt;br /&gt;PS C:\&amp;gt;&lt;/font&gt; &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;Ah...good. So the filename is:&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;join-path C:\Users\Administrator\AppData\Roaming\Microsoft\UProof CUSTOM.DIC&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;or just&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;C:\Users\Administrator\AppData\Roaming\Microsoft\UProof\CUSTOM.DIC&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;If we examine the file, we see it&amp;#39;s a simple&amp;nbsp;Unicode file containing one token/symbol per line.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;How do we get the list of Exchange commands? Get-ExCommand, of course. But...if you aren&amp;#39;t running the command on an Exchange server or on a workstation where the Exchange Management Tools are installed (e.g., you are using remote PowerShell to connect to an Exchange server), you won&amp;#39;t have Get-ExCommand. It&amp;#39;s a non-exported function. However, you WILL have the Exchange module you can use. So, to get the Exchange commands:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;Get-Command -module $global:importresults&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Note that $global:importresults can potentially contain more than just the Exchange module. It is a list of all imported modules. &lt;/p&gt;
&lt;p&gt;We notice that this returns more than we want. We really just want imported functions and&amp;nbsp;cmdlets that have valid names. So:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;Get-Command -module $global:importresults | ?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { ($_.CommandType -eq &amp;quot;cmdlet&amp;quot; -or $_.CommandType -eq &amp;quot;function&amp;quot;) -and $_.Name -notmatch &amp;quot;:&amp;quot; }&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;That gives us our valid Exchange cmdlets and functions! However, all we are interested in is the name of the function; not all the other garbage:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;Get-Command -module $global:importresults | ?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { ($_.CommandType -eq &amp;quot;cmdlet&amp;quot; -or $_.CommandType -eq &amp;quot;function&amp;quot;) -and $_.Name -notmatch &amp;quot;:&amp;quot; } |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Name&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Excellent. Now we have the names we want and we know where we want them to go! So let&amp;#39;s save them:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;Get-Command -module $global:importresults | ?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { ($_.CommandType -eq &amp;quot;cmdlet&amp;quot; -or $_.CommandType -eq &amp;quot;function&amp;quot;) -and $_.Name -notmatch &amp;quot;:&amp;quot; } |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Name |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Out-File -Append C:\Users\Administrator\AppData\Roaming\Microsoft\UProof\CUSTOM.DIC&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;or, since we know that&amp;#39;s the per-user AppData folder:&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;PS C:\&amp;gt; $env:AppData&lt;br /&gt;C:\Users\Administrator\AppData\Roaming&lt;br /&gt;PS C:\&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;we can also say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="Courier New"&gt;Get-Command -module $global:importresults | ?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { ($_.CommandType -eq &amp;quot;cmdlet&amp;quot; -or $_.CommandType -eq &amp;quot;function&amp;quot;) -and $_.Name -notmatch &amp;quot;:&amp;quot; } |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Select Name |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Out-File -Append (join-path $env:AppData Microsoft\UProof\CUSTOM.DIC)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;And there you have it. A LONG one-liner, but a one-liner nonetheless.&lt;/p&gt;
&lt;p&gt;This does assume that&amp;nbsp;you are running this on the same workstation where the custom dictionary resides.&lt;/p&gt;
&lt;p&gt;This procedure should be generalizable (is that a word?) for any module.&lt;/p&gt;
&lt;p&gt;Pat and I both worked on this going back and forth on FB. An interesting way to develop a script!&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;
&lt;p&gt;P.S. Pat went on and further developed the script to automatically choose an Exchange server, connect to it, and update the CUSTOM.DIC. To see that, visit his &lt;a title="Pat Richard website" href="http://ucblogs.net/blogs/exchange" target="_blank"&gt;website&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=621" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Script/default.aspx">Script</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/PowerShell/default.aspx">PowerShell</category></item><item><title>Exchange 2010 Gotcha - #4</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/05/11/exchange-2010-gotcha-4.aspx</link><pubDate>Tue, 11 May 2010 20:45:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:620</guid><dc:creator>michael</dc:creator><slash:comments>885</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/05/11/exchange-2010-gotcha-4.aspx#comments</comments><description>&lt;p&gt;Public Folder Contacts Can&amp;#39;t Replicate&lt;/p&gt;
&lt;p&gt;If you have a public folder contact that includes an e-mail address, there is also an e-mail address type field that is associated with every e-mail address.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note: You cannot see this e-mail address type field by default - but it&amp;#39;s still there. To view it, go to a Contacts folder in Outlook and create a custom view. In that view, add &amp;quot;Full Name&amp;quot;, then select &amp;quot;E-Mail Address Fields&amp;quot; and add &amp;quot;E-Mail Address&amp;quot; and &amp;quot;E-Mail Address Type&amp;quot;. Now, examine the Contacts in the folder using the custom view. You&amp;#39;ll see e-mail address types such as &amp;quot;SMTP&amp;quot; for external Internet contacts, &amp;quot;EX&amp;quot; for internal organization e-mail contacts, &amp;quot;FAX&amp;quot; if you have a fax connector installed, etc.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Now, Exchange 2003 (and perhaps Exchange 2007 - I have not checked in my lab) allowed two differerent e-mail address types to indicate &amp;quot;SMTP&amp;quot;. I &lt;strong&gt;believe&lt;/strong&gt; this to be a hold-over from Outlook 97, although I have no documented proof of that (but in Outlook 97 we had &amp;quot;Internet mode&amp;quot; and &amp;quot;Corporate or Workgroup mode&amp;quot; - so it makes sense). The two different types are &amp;quot;SMTP&amp;quot; and &amp;quot;POP3/INTERNET&amp;quot;.&lt;/p&gt;
&lt;p&gt;&amp;quot;POP3/INTERNET&amp;quot; is not valid in Exchange 2010. If you attempt to replicate a public folders to Exchange 2010 that contains this e-mail address type, the replication will abort. Thankfully, you do receive an event log error message that provides SOME clues about this occurring. The error looks like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;font face="courier new,courier"&gt;&lt;pre&gt;Event Type:      Error
Event Source:    MSExchange Store Driver
Event Category:  (1)
Event ID:        1020
Date:            5/11/2010
Time:            10:00:43 AM
User:            N/A
Computer:        exchmb2.example.com
Description:
The store driver couldn&amp;#39;t deliver the public folder replication message &amp;quot;Folder Content Backfill Response (exchmb1-IS@example.com)&amp;quot; because the following error occurred: Property validation failed. Property = [{00062004-0000-0000-c000-000000000046}:0x8082] Email1AddrType Error = The length of the property is too long. The maximum length is 9 and the length of the value provided is 13... For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
&lt;/pre&gt;&lt;/font&gt;&lt;/blockquote&gt;
&lt;p&gt;What you will have to do is, using Outlook, obtain a list of all the affected contacts as described above, and also using Outlook, change the address type to SMTP.&lt;/p&gt;
&lt;p&gt;In Outlook 2010, you can directly edit this field. In Outlook 2007, you will need to open each contact, right click on the e-mail address in the default display, and select Properties. Then,&amp;nbsp;for the Address Type field, click the &amp;quot;Internet&amp;quot; button (this changes the e-mail address type to &amp;quot;SMTP&amp;quot; - the button will now display &amp;quot;Custom&amp;quot;). Then &amp;quot;Save and Close&amp;quot; the updated contact.&lt;/p&gt;
&lt;p&gt;In my migrations, I&amp;#39;ve only had a maximum of about 150 of these. If you have thousands, you will probably need to consider writing a webdav application/script to run against the Exchange 2003 server(s).&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=620" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Upgrade_2F00_Migration/default.aspx">Upgrade/Migration</category></item><item><title>Exchange 2010 Gotcha - #3</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/04/22/exchange-2010-gotcha-3.aspx</link><pubDate>Thu, 22 Apr 2010 11:16:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:610</guid><dc:creator>michael</dc:creator><slash:comments>71</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/04/22/exchange-2010-gotcha-3.aspx#comments</comments><description>&lt;p&gt;The TrustedInstaller - Isn&amp;#39;t.&lt;/p&gt;
&lt;p&gt;Generally, when applying patches (whether service packs or hotfixes or rollups), the installation process will automatically acquire all the necessary permissions - if the user executing the process CAN acquire those permissions. This is especially relevant under Server 2008 and Server 2008 R2, where an interactive logged in user has their access token artificially limited, even if UAC is disabled.&lt;/p&gt;
&lt;p&gt;However, the Exchange 2010 update installer either drops administrative permissions too early or never acquires all of the permissions that are necessary. When applying update rollups, binaries are updated just fine - but OWA source files are not.&lt;/p&gt;
&lt;p&gt;This commonly leads to a patch application that appears successful - but it isn&amp;#39;t. When testing OWA after an update-rollup appliction, a common error is &amp;quot;syntax error in flogon.js at 1, 1.&amp;quot; This is an indication that the patch was NOT installed with administrative permissions.&lt;/p&gt;
&lt;p&gt;Reapply the patch with administrative permissions.&lt;/p&gt;
&lt;p&gt;Note: I have heard reports that this begins to affect Exchange 2007 AFTER the application of service pack 2, when Exchange 2007 is installed on Windows Server 2008.&lt;/p&gt;
&lt;p&gt;This has (at this writing) been seen to affect Exchange 2010 UR1, UR2, and UR3.&lt;/p&gt;
&lt;p&gt;To properly ensure that an application of&amp;nbsp;an update-rollup has adequate permissions, do one of the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Right-click on the patch (&lt;em&gt;filename.msp&lt;/em&gt;) and click on &amp;quot;Run as Administrator&amp;quot;&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Open an elevated command prompt and then start the patch (just enter &lt;em&gt;filename.msp&lt;/em&gt;). To open an elevated command prompt, click Start, then enter &amp;quot;&lt;font face="courier new,courier"&gt;cmd&lt;/font&gt;&amp;quot; into the search area, right click on the &lt;font face="courier new,courier"&gt;cmd.exe&lt;/font&gt; that appears in the results area and click on &amp;quot;Run as Administrator&amp;quot;.&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Open an elevated PowerShell session and then invoke the patch (enter &amp;quot;&lt;em&gt;ii filename.msp&lt;/em&gt;&amp;quot;). The open an elevated PowerShell session, click Start, then enter &amp;quot;&lt;font face="courier new,courier"&gt;PowerShell&lt;/font&gt;&amp;quot; into the search area, right click on the &amp;quot;&lt;font face="courier new,courier"&gt;Windows PowerShell&lt;/font&gt;&amp;quot; that appears in the results area and click on &amp;quot;Run as Administrator&amp;quot;.&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=610" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Upgrade_2F00_Migration/default.aspx">Upgrade/Migration</category></item><item><title>Exchange 2010 Gotcha - #2</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/04/14/exchange-2010-gotcha-2.aspx</link><pubDate>Wed, 14 Apr 2010 22:42:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:607</guid><dc:creator>michael</dc:creator><slash:comments>322</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/04/14/exchange-2010-gotcha-2.aspx#comments</comments><description>&lt;p&gt;Incoming e-mail CAN&amp;#39;T come in!&lt;/p&gt;
&lt;p&gt;This issue is not exclusive to Exchange 2010 - it also exists in Exchange 2007.&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;default receive connector created by the Exchange setup process does not include permissions to include &amp;quot;Anonymous users&amp;quot; on the default server permission group. Microsoft assumes that you will be using their Edge Server product (which isn&amp;#39;t Anonymous, but Authenticated).&lt;/p&gt;
&lt;p&gt;Of course, most people (? - at least my customers!) will not be using the Microsft Edge Server product, but some other gateway e-mail product.&lt;/p&gt;
&lt;p&gt;Therefore, you will need to set the &amp;quot;Anonymous users&amp;quot; permission on the default server permission group.&lt;/p&gt;
&lt;p&gt;Otherwise - incoming Internet e-mail will bounce!&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[Edit on April 15, 2010 to spell &amp;quot;Authenticated&amp;quot; correctly.]&lt;/em&gt;&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=607" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Upgrade_2F00_Migration/default.aspx">Upgrade/Migration</category></item><item><title>The ms-Exch-Store-Admin permission</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/04/07/the-ms-exch-store-admin-permission.aspx</link><pubDate>Wed, 07 Apr 2010 21:12:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:604</guid><dc:creator>michael</dc:creator><slash:comments>8</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/04/07/the-ms-exch-store-admin-permission.aspx#comments</comments><description>&lt;p&gt;In last week&amp;#39;s blog post, &lt;a title="Exchange 2010 Gotcha - #1" href="http://theessentialexchange.com/blogs/michael/archive/2010/03/30/exchange-2010-gotcha-1.aspx" target="_blank"&gt;Exchange 2010 Gotcha&amp;nbsp; - #1&lt;/a&gt;, I use the &lt;font face="courier new,courier"&gt;Add-AdPermission&lt;/font&gt; PowerShell cmdlet to add a set of permissions to each mailbox database. One of those permissions was the &lt;font face="courier new,courier"&gt;ms-Exch-Store-Admin&lt;/font&gt; permission.&lt;/p&gt;
&lt;p&gt;If you&amp;#39;ve ever installed any BlackBerry software before, or ever installed Cisco&amp;#39;s Unity line of products before, you&amp;#39;ve seen this permission mentioned. This permission was introduced in Exchange 2000 and provides the capability of &amp;quot;administering an information store&amp;quot;. That&amp;#39;s a pretty non-specific permission, but that&amp;#39;s really all the available Microsoft documentation says about it. See, for example, &lt;a title="Permissions Available in Exchange (relative to Exchange 2003)" href="http://technet.microsoft.com/en-us/library/bb123776(EXCHG.65).aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s worthwhile to note that, by itself, this permission does little. But when combined with the &lt;font face="courier new,courier"&gt;View-Only Organization Management&lt;/font&gt; permission (for example) and the &lt;font face="courier new,courier"&gt;Send-As&lt;/font&gt; permission, it allows a grantee the capability of doing a Send-As for any user within an information store for which they have that right - without knowing the password of the user who owns the mailbox. When combined with the &lt;font face="courier new,courier"&gt;Modify Permission&lt;/font&gt; permission, it allows the grantee to change Full Control assignments for a given mailbox, etc. When combined with the &lt;font face="courier new,courier"&gt;Server Administrator&lt;/font&gt; permission, it allows the grantee the capability of mounting and dismounting databases, moving mailboxes, etc. &lt;/p&gt;
&lt;p&gt;That is,&amp;nbsp;the &lt;font face="courier new,courier"&gt;ms-Exch-Store-Admin&lt;/font&gt;&amp;nbsp;permission has some pretty hefty powers and should not be granted lightly.&lt;/p&gt;
&lt;p&gt;Unfortunately, there is no available public documentation that fully defines this permission and/or what capabilities it may allow. Suffice it to say that you should carefully consider whether granting this permission is an appropriate choice for any arbitrary user&amp;nbsp;account or group. The answer is &amp;quot;probably not&amp;quot;.&lt;/p&gt;
&lt;p&gt;Thanks to Ross Smith, IV and Bill Long for answering a question of mine that led to this post.&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=604" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category></item><item><title>Exchange 2010 Gotcha - #1</title><link>http://theessentialexchange.com/blogs/michael/archive/2010/03/30/exchange-2010-gotcha-1.aspx</link><pubDate>Tue, 30 Mar 2010 17:34:00 GMT</pubDate><guid isPermaLink="false">57ea7d7e-b8c6-404f-99fb-04d07393726a:599</guid><dc:creator>michael</dc:creator><slash:comments>138</slash:comments><comments>http://theessentialexchange.com/blogs/michael/archive/2010/03/30/exchange-2010-gotcha-1.aspx#comments</comments><description>&lt;p&gt;As I work through migrations to Exchange Server 2010 with my various clients, I&amp;#39;m developing a list of Exchange 2010 &amp;quot;gotchas&amp;quot;. Not necessarily things that are earth-shattering, but do have the potential to be surprising to administrators.&lt;/p&gt;
&lt;p&gt;Gotcha #1 revolves around the fact that an Offline Address Book is no longer automatically specified for a new mailbox database. Surprise!&lt;/p&gt;
&lt;p&gt;So, just like most other things that require specific processes in Exchange, you should develop a list of items to be performed when you create a new mailbox database, whether you use the Exchange Management Console or the Exchanage Management Shell. Consider this as a list:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;Create the database, specifying an individual folder for the database (e.g., E:\DB-Zippy\Zippy.edb) and an individual folder for the log files (e.g., E:\Logs-Zippy). If you are using the EMC, and you do not want to take the default paths, you will have to&amp;nbsp;type the entire path into the path fields (there is no browse button). As a suggestion, using Windows Explorer, first browse to the path where you want to put the files, and copy them into the clipboard, then you can paste them directly into the fields in EMC (or into the EMS, where you always have to enter the entire path).&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Set the Offline Address Book (OAB). If you are using the EMS, you can specify the OAB (e.g., &amp;quot;\Default Offline Address Book&amp;quot;) when you create the database. When using EMC, you&amp;#39;ll have to open the property sheet for the mailbox database, click the Client Settings tab, and select the address book via the Browse... button. You should also take this opportunity to verify that the Public Folder database is a valid public folder database (if you still have public folders in your environment).&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Set the Journal Recipient. You cannot specify the Journal Recipient during creation when using either EMC or EMS. With EMC, you&amp;#39;ll have to open the property sheet for the mailbox database, click the Maintenance tab, check the box to select the journal recipient, and browse for the particular user. &lt;br /&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Set external permissions. If you are using Cisco Unity or RIM&amp;#39;s BlackBerry Server (Enterprise, Professional, or Enterprise Express), then you&amp;#39;ll need to set additional permissions to allow those software packages to access mailboxes contained in this mailbox database. There is no mechanism for performing this operation using the EMC. For BlackBerry, this is the relevant command, executed from the EMS (assuming that your BlackBerry administrative user is named BESAdmin):&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;Get-MailboxDatabase | Add-ADPermission -User BESAdmin -AccessRights ExtendedRight -ExtendedRights Receive-As, Send-As, ms-Exch-Store-Admin&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Obviously, there are additional parameters that can be set. However, these four meet the needs of all my clients and probably will work for you too!&lt;/p&gt;
&lt;p&gt;Watch this blog for more &amp;quot;Exchange 2010 gotchas&amp;quot;.&lt;/p&gt;
&lt;p&gt;Until next time...&lt;/p&gt;
&lt;p&gt;If there are things you would like to see written about, please let me know.&lt;/p&gt;&lt;img src="http://theessentialexchange.com/aggbug.aspx?PostID=599" width="1" height="1"&gt;</description><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Administration/default.aspx">Administration</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Exchange/default.aspx">Exchange</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/PowerShell/default.aspx">PowerShell</category><category domain="http://theessentialexchange.com/blogs/michael/archive/tags/Upgrade_2F00_Migration/default.aspx">Upgrade/Migration</category></item></channel></rss>