GAPTHEGURU

Geek with special skills

Exchange 2010: Full description Extended Rights

ms-Exch-SMTP-Submit If the SMTP receive session does not have this permission, it will fail to submit messages. It will fail both the “MAIL FROM” and “AUTH” command. The “AUTH” command will also fail as the credential might have been correct, but the authenticated user or computer will have no chance to do anything useful with the session.

ms-Exch-SMTP-Accept-Any-Recipient If the SMTP receive session does not have this permission, the server will reject the “RCPT TO” command if the recipient domain does not match any accepted domain. You could call this permission also the Relay permission.

ms-Exch-SMTP-Accept-Any-Sender If the SMTP receive session does not have this permission, the server will check sender address spoofing. If the spoofing check fails, the message gets rejected at either “MAIL FROM” or EOD (End Of Data), depending on which sender (envelop or message/header) was found to be spoofed.

ms-Exch-SMTP-Accept-Authoritative-Domain-Sender If the SMTP receive session does not have this permission, the server will reject “MAIL FROM” if the specified address is at an authoritative domain. (An authoritative domain is an administrative domain with at least one mail server responsible for the final delivery of messages addressed to that domain.)

ms-Exch-SMTP-Accept-Authentication-Flag If the SMTP receive session does not have this permission, the server will ignore the AUTH= option that was specified on the “MAIL FROM” command. (Internally, Exchange Servers transfer anonymous messages using “AUTH=<>”.)

ms-Exch-Accept-Headers-Routing If the SMTP receive session does not have this permission, the server will strip all “Received:” headers. Note: This should only happen for client message submissions over SMTP, which is why by default ExchangeUsers do not get this permission. (See RFC 2476.)

ms-Exch-Accept-Headers-Organization If the SMTP receive session does not have this permission, the server will strip all organization headers. Those headers all start with “X-MS-Exchange-Organization-”.

ms-Exch-Accept-Headers-Forest If the SMTP receive session does not have this permission, the server will strip all forest headers. Those headers all start with “X-MS-Exchange-Forest-”.

ms-Exch-SMTP-Accept-Exch50 If the SMTP receive session does not have this permission, the server will not accept the “XEXCH50″ command. Note: This command is necessary for interoperability with Exchange2000 and Exchange2003. In an environment with only Exchange2007 servers, the “XEXCH50″ command won’t be used once disabled.

ms-Exch-SMTP-Send-Exch50 If the SMTP send session does not have this permission, the server will not send the “XEXCH50″ command.

ms-Exch-Send-Headers-Routing If the SMTP send session does not have this permission, the server will strip all “Received:” headers.

ms-Exch-Send-Headers-Organization If the SMTP send session does not have this permission, the server will strip all organization headers. Those headers all start with “X-MS-Exchange-Organization-”.

ms-Exch-Send-Headers-Forest If the SMTP send session does not have this permission, the server will strip all organization headers. Those headers all start with “X-MS-Exchange-Forest-”.

ms-Exch-Bypass-Message-Size-Limit If the SMTP receive session has this permission, the server will skip message size restrictions at the protocol level.

ms-Exch-Bypass-Anti-Spam If the SMTP receive session has this permission, the server will pass this permission to anti spam agents, as to skip this message for anti-spam checks.

Advertisements

08/28/2012 Posted by | Exchange server | , | Leave a comment

HOW TO: Prevent annoying spam from your own domain

One of the more annoying types of spam is the one that seems to be coming from your own domain; or worse— from your own email address! Of course, users from your own domain don’t generally spam each other— unless you’re using one of the free web-based email services. And most of us don’t spam ourselves.

Obviously, this is coming from a spammer who has spoofed your email address, or that of someone else from your domain. Unfortunately, SMTP— the protocol that allows mail clients and servers to exchange email, allows headers to be spoofed easily.

In Exchange Server 2010, Accepted Domains tell Exchange which domains to accept email for. If a domain exists as an Accepted Domain, there is no reason external senders should use that domain in the MAIL or FROM headers.

You may have remote POP3/IMAP4 users who use SMTP to send mail. However, such sessions should be authenticated, and preferably use a separate Receive Connector.

Thanks to the extensive Transport Permission model in Exchange 2010, we can easily prevent such spam. Receive Connectors have the ms-exch-smtp-accept-authoritative-domain-sender permission which dictates whether an Accepted Domain can be used in the MAIL orFROM headers. External/internet hosts submit mail to your server without authentication, as anonymous senders. To prevent anonymous senders from sending mail using your domain(s), we need to remove the ms-exch-smtp-accept-authoritative-domain-senderpermission assigned to them.

Use the following command to remove the ms-exch-smtp-accept-authoritative-domain-sender permission from NT Authority\Anonymous Logon on internet-facing Receive Connector(s):

Get-ReceiveConnector “My Internet ReceiveConnector” | Get-ADPermission -user “NT AUTHORITY\Anonymous Logon” | where {$_.ExtendedRights -like “ms-exch-smtp-accept-authoritative-domain-sender”} | Remove-ADPermission

Once this permission is removed, when anonymous senders try to submit mail using your Accepted Domain(s), here’s how the SMTP conversation goes:

220 E12Postcard.e12labs.com Microsoft ESMTP MAIL Service ready at Thu, 28 Aug 2012 06:22:43 -0700
helo
250 E12Postcard.gaptheguru.com Hello [172.31.0.170]
mail from:test@gaptheguru.com
550 5.7.1 Client does not have permissions to send as this sender

Exchange stopped spoofing of P1/envelope headers. Let’s continue the session and try to spoof the P2 headers (the ones in the DATA part of the message) — maybe that’ll work!

mail from:someone@someotherdomain.com
250 2.1.0 Sender OK
rcpt to:test@gaptheguru.com

250 2.1.5 Recipient OK
data
354 Start mail input; end with .
from:test@gaptheguru.com
subject: Header spoofing

This is how we spoof headers, spoof headers.

.
550 5.7.1 Client does not have permissions to send as this sender
quit
221 2.0.0 Service closing transmission channel

As you can see, removing the ms-exch-smtp-accept-authoritative-domain-senderpermission stops spoofing of your domains in both envelope (P1) and message (P2) headers.

When not to remove the permission?
Do not do this change on Receive Connectors used by internal or trusted SMTP hosts (such as copiers/scanners and application servers) that submit mail without authentication. If you use internal/trusted SMTP host, you should make an additional Receive Connector for this purpose.

08/28/2012 Posted by | Exchange server, Recive Connector | , , , | Leave a comment

Considerations when using Outlook 2003 with Exchange 2010

1.     Common Client Access Considerations for Outlook 2003 and Exchange 2010

There are several scenarios for consideration when deploying Exchange Server 2010 into an environment where Outlook 2003 is used. Most of these scenarios have been documented prior to the product release and some applied to previous versions. However, in a review of support cases, we have found that they have not been used prior to contacting Microsoft.

This document introduces some of the scenarios and the articles that will resolve these issues. If you are planning a deployment of Exchange Server 2010, understanding client configuration, and the requirements and capabilities of your organization are of importance to the user experience.  Primarily field office environments or environments where users are not joined to the domain, profile distribution, or the ability or inability to enforce policies or distribute the solutions will dictate how you address the issue.

2.      Encryption

This is a top support issue for Outlook 2003 access to Exchange 2010.

Exchange Server 2010 introduces additional “out of the box” security for Client communications to the Exchange Server – encryption between the Client and the Server is enabled, by Default. This is RC4 encryption – where the client negotiates the encryption level based on the client operating system’s capabilities – up to 128-bit encryption.  This is documented in the following topic in TechNet online:

Understanding RPC Client Access
http://technet.microsoft.com/en-us/library/ee332317.aspx

Prior to Outlook 2007, encryption was not enabled on the Client side, by default.   However, if profiles for Outlook 2007 exist where encryption is disabled, or if Outlook 2003 profiles created with default settings are used with Exchange Server 2010, the connection will fail when Outlook attempts to connect to an Exchange Server 2010 mailbox. One or more of the following common error messages will be displayed:

  • Cannot start Microsoft Office Outlook. Unable to open the Outlook window. The set of folders could not be opened.
  • Unable to open your default e-mail folders. The Microsoft Exchange Server computer is not available. Either there are network problems or the Microsoft Exchange Server computer is down for maintenance.
  • The connection to the Microsoft Exchange Server is unavailable. Outlook must be online or connected to complete this action.
  • Unable to open your default e-mail folders. The information store could not be opened.
  • Outlook could not log on. Check to make sure you are connected to the network and are using the proper server and mailbox name. The connection to the Microsoft Exchange Server is unavailable. Outlook must be online or connected to complete this action.

There are several methods to work around this issue, from immediate manual change by the administrator or the user, to deployment of administrative templates or new profiles.  Each of these scenarios is documented in the following article from the Microsoft Knowledge Base:

Outlook connection issues with Exchange 2010 mailboxes because of the RPC encryption requirement
http://support.microsoft.com/kb/2006508

3.      New Mail Notifications and UDP

Exchange 2010 no longer supports UDP for new mail notifications. However, Outlook 2003 relied primarily upon UDP notifications to display new messages and changes to folders. The result is that Outlook 2003 users will see delays in updates to folders and the Send/Receive process appears to take a long time.

The following article discusses the issue and two possible resolutions for the organization:

In Outlook 2003, e-mail messages take a long time to send and receive when you use an Exchange 2010 mailbox
http://support.microsoft.com/kb/2009942

4.     Address Book Service (Directory Access)

Directory access has changed in the Exchange Server 2010 world. The following TechNet topic introduces the changes and is currently being updated with more information.

Understanding the Address Book Service
http://technet.microsoft.com/en-us/library/ee332346.aspx

A future topic will cover this in more detail.

5.     Public Folders, Offline Address Book and Free/Busy

Outlook 2003 uses the Public Folders free/busy messages to determine availability in the Calendar and as the source for Offline Address Book synchronization. If Public Folders are not configured during Exchange Server 2010 setup, Offline Address Book and Free/Busy will not be available to Outlook 2003 users. These users will encounter connection errors.

If free/busy Public Folders folder is not replicated to Exchange Server 2010, users will encounter the following:

Users who use Outlook 2003 cannot publish their free/busy data in Exchange Server 2010 or in Exchange Server 2007
http://support.microsoft.com/kb/945602

If clients inside the organization or connected via VPN/RAS, and the organization uses a Proxy server, the Client Access Server should be listed in the “Bypass proxy server for local addresses” configuration.

Error message when Outlook synchronizes an offline address book with Exchange Server 2007 and Exchange Server 2010: “0x8004010F”
http://support.microsoft.com/kb/939765

Also, if there are missing address book list objects or missing or incorrect address lists, the following may occur:

An error occurs when you try to synchronize the offline address list on an Exchange Server server while you are using Outlook 2003: “0x8004010F”
http://support.microsoft.com/kb/905813

6.      Opening Additional Mailboxes

Delegate Access issues, opening other user’s folders or mailboxes are a common operation in the enterprise. Outlook 2003 users may encounter issues, if the environment is not properly prepared for their use:

Office Outlook 2003 does not connect to two or more additional mailboxes in a mixed Exchange Server 2007 and Exchange Server 2010 environment
http://support.microsoft.com/kb/978777

Anerror occurs when an Exchange server 2003 user tries to open more than one delegate mailboxes of Exchange Server 2010 in Outlook 2003
http://support.microsoft.com/kb/979690

7.      RPC over HTTP Connectivity

The following article discusses issues with Outlook 2003 connectivity when the RPC proxy server extensions do not load correctly. This article also applies to Exchange Server 2010 connections.

Error message when Outlook2003 users connect to an Exchange server by using RPC over HTTP: “Server Unavailable”
http://support.microsoft.com/kb/919092

8.      Unified Communications

Integration features with Office Communicator and functionality with Office Communications Server have been documented in the following documents:

The presence information for a Communications Server user may not appear, or may appear intermittently, in Outlook 2003 Service Pack 2 or in Outlook 2007
http://support.microsoft.com/kb/968099

*Communicator does not update the free/busy information as scheduled
http://support.microsoft.com/kb/941103

*Note: This functionality is not available to Outlook 2003/Exchange Server 2003 users, as the Availability Service functionality is required for both the client and the Exchange Server. The only method to obtain this functionality is to upgrade both the client and the server(s).

08/10/2012 Posted by | Exchange server | , | Leave a comment

Recovering Public Folders After Accidental Deletion

Part 1: Recovery Process

Overview

This two-part blog series will outline some of the recovery options available to administrators in the event that one or more public folders are accidentally deleted from the environment. The first part will explain the options, while the second part will outline the architectural aspects of public folders that drive the options.

Introduction

In older versions of Exchange, mailbox and mailbox database recovery was a long, complicated process involving backups, recovery servers, and changes to Active Directory. Successive versions of the product have introduced more and more functionality around recovery (recovery storage groups/databases, database replication, etc.), and we’re now at the point where restoring a mailbox is a seemingly trivial operation, and restoring a mailbox database is almost unheard of. But mailboxes aren’t the only data stored on Mailbox servers in Exchange Server 2010, and the procedure for restoring public folders and public folder databases differs greatly from the mailbox procedure.

Review of Recovery Options

The first two recovery options are detailed either in TechNet or elsewhere on the Exchange team blog site, so I’ll simply list them here and then move on to the real purpose of this blog.  The recovery options for public folders and public folder databases in Exchange Server 2010 are as follows, from the easiest to the most complex:

  1. Recover deleted folders via Outlook (detailed in http://technet.microsoft.com/en-us/magazine/dd553036.aspx).Note: Exchange Server 2010 Service Pack 2 fixes an issue where users were unable to use Outlook to recover deleted public folders. This is another reason to upgrade your Exchange Server 2010 systems to SP2 at the earliest opportunity.
  2. Recover deleted folders via ExFolders (http://blogs.technet.com/b/exchange/archive/2009/12/04/3408943.aspx).
  3. Recover folders via public folder database restore.

The first option is the easiest and most obvious – if an end user accidentally deletes a folder, he or she should be able to undelete that folder using Outlook. Failing that, an administrator should be able to use ExFolders to recover that folder. But what if these options won’t work in your situation? What if the end user didn’t realize he or she deleted the folder, and a month has passed? Or what if your organization has changed the retention settings for deleted public folders, and essentially eliminated the dumpster?  How do you recover public folders in this case?

Recovery Options

At the heart of public folder recovery is a painful truth: you can’t delete a public folder from the organization and recover it by simply restoring an older version of a public folder database. If you restore a public folder database from backup and place it back into production, you’ll see the public folders only until the server receives replication messages. Because the public folder hierarchy – the list of all folders in the environment – no longer includes the folders which were deleted, the target server has copies of folders which, from Exchange’s perspective, don’t exist. As soon as that public folder database receives a hierarchy update, it will see that those public folders aren’t present in the hierarchy, and the store will delete the public folder again. Since you can’t edit the hierarchy via the Public Folder Management Console (or even via adsiedit.msc), you can’t manually add that public folder back in. So, given this limitation, how do we recover that public folder?

Consider the following points:

  • If you don’t replicate every folder to every database, you would need to delete all current databases and then recover from backup any database that contains unique content.  This only works if you have recent backups, of course, and would also require that you export any content generated since that backup, since you’re going to delete all of the existing databases. The deletion is necessary because if a restored public folder store receives hierarchy replication from one of the existing public folder stores, the whole exercise is for naught.
  • If you do replicate all folders to all stores in the environment, you can delete all stores and just restore one database, then replicate the content from that database out to the other servers. Again, this depends on all databases having duplicate content, and you must delete all existing databases before restoring the one from backup.
  • You can restore a backup of the public folder database to an isolated Exchange environment, connect to the public folder database with Outlook, export all content to a series of PSTs, create new folders in the production environment with the same names as the deleted folders, and then import all of the content. This is obviously a somewhat manual process, and most administrators aren’t going to want to do this.

Recommended Recovery Procedure

Thankfully there is a much easier process which can be performed in-place and with a minimum of fuss.

  1. Select one of the existing public folder servers in the environment. [Using an existing server simplifies the process a bit.] You will isolate this system from its replication partners, so choose a system that doesn’t serve as the source for a lot of content which needs to be replicated.
  2. Using Registry Editor, set the value of the Replication registry key (HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeIS\<servername>\Public- <GUID of Public Store>) to 0(zero).Note: You may need to create this DWORD key if it doesn’t already exist. Further information on the Replication registry key is available in the article, “Replication does not occur for one Exchange server in the organization” (http://support.microsoft.com/kb/812294). This registry key also applies to Exchange Server 2007 and 2010.
  3. Restore the public folder database in place using your normal restoration procedure.
  4. Using an Outlook client, log onto a mailbox which uses the restored public folder database as its default public folder store (this is necessary in order to see the restored folders). If you don’t have a mailbox database which uses that public folder database as its default, either create a new mailbox database (recommended) or change an existing mailbox database to use the newly-restored public folder database.
  5. If necessary, click the Folders icon at bottom left of the Navigation screen, and then expand the public folders node.
  6. Copy each of the folders you wish to restore to another location within the public folder hierarchy. If you’re restoring an entire hierarchy, you can simply Ctrl-click and drag the root folder to make new copies of all subfolders. Although the new folders will have similar names to the originals, the underlying folder IDs (FIDs) are different.
  7. Once you’ve created copies of all of the folders, verify that the replica lists include all desired targets (and reconfigure as appropriate).
  8. At this point, it’s now safe to reintroduce that server into the production environment. To do so, dismount the public folder database, delete the Replication registry key (or set it to 1), and then remount the database.
  9. As soon as hierarchy is replicated to the server, the original folders will once again disappear, but the copies of the folders will be replicated to all replication partners.

You may need to add mail-enabled public folders back into distribution groups, as their SMTP addresses will likely be different from those on the original folders. End users will also need to recreate public folder favorites in Outlook.

Summary

Recovering from accidental public folder deletion can be difficult, especially if you don’t take hierarchy replication into account. By restoring into an isolated environment, and then cloning the folders to be restored, you can work around this limitation and restore the missing content. In the next blog entry, I’ll explain the underlying architecture of public folders (including replication, change numbers, and the replication state table) to show why these steps are so necessary.

———————————————————————————————————————————————————————————————————————————————————————————-

Part 2: Public Folder Architecture

 

Introduction

In this second part, I’m going to describe some of the inner workings of public folders themselves.  Each organization maintains a list of all public folders in the environment, as well as the locations of all replicas.  This list is called the hierarchy, and it’s common to all public folder stores in the environment.  The hierarchy lists all public folders in the environment as well as which servers host replicas of each folder.  Each public folder store has a copy of the hierarchy, and uses it to provide referrals to end users for public folder replicas on other servers (among other things).  Each public folder store also maintains a table, called the replication state table, which keeps track of the status of each folder.  This table is a critical yet little understood feature of public folders, and it has a huge impact on recovery.

Overview

As I said above, each public folder store maintains a replication state table, but unlike the hierarchy, it’s unique to each store.  A public folder store maintains information about the public folders for which it has a replica, not just for itself but for all servers with that replica.  It does this so that it knows which other stores have more up-to-date public folder content, or which ones might have items required for backfill replication (catching up on old or missing items).

Imagine the following scenario:  we have three servers, each hosting a public folder database – PFS1, PFS2, and PFS3.  We have a folder – Folder1 – which is replicated to each database.  If I could peer into the replication state table for PFDB1, I would see an entry for Folder1, and that entry would contain information about Folder1’s status not on for PFS1, but also for PFS2 and PFS3.  What kind of information does this table actually contain?  To answer that, we need to dig yet further into public folder structure, and talk about CNs.

Change Numbers

CNs – or, to give their full name, change numbers – are numbers assigned to each modification made to content in a public folder.  Think of them as per-folder odometers – they increment each time a change is made to a folder, and only increase, never decrease. Each public folder assigns CNs to the changes made on a given replica, and that information is transmitted to other replicas.  These other replicas use this information to see if they’ve already received a particular change.  For example, if I make a change to Folder1 on PFS1, that database might assign change number 211 to that modification.  When the public folder database replicates that change to other databases, it records and transmits that change as FID1-123:PFS1:211.  [Folder1 is represented within the public folder database, and by extension in the replication traffic, by a folder ID (FID). This becomes very important later.] PFS2 receives the replication message and checks to see if it has already received CN 211 from PFS1.  If it hasn’t, it applies the change and updates its own entry in the replication state table to reflect the fact that it has now received change 211 for Folder1 (FID1-123) from PFS1.  If PFS3 later replicates the same change (FID1-123:PFS1:211) to PFS2, PFS2 will check its list, see that it has indeed already received that change, and discard that particular replication message.

Here’s a sample hierarchy replication message. Notice the CN min, CN max, and FID entries in the description field.

Event Type: Information
Event Source: MSExchangeIS Public Store
Event Category: Replication Outgoing Messages
Event ID: 3018
Description:
An outgoing replication message was issued.
Type: 0x2
Message ID: <23599A0EB070AA92F03E31C546C9C8FFA4F7@contoso.com>
Database “PFDB”
CN min: 1-11D3, CN max: 1-11D4
RFIs: 1
1) FID: 1-38BF, PFID: 1-1, Offset: 28
IPM_SUBTREE\TestPF

At any given time, each public folder store knows exactly what content it has, and has a general idea of what content the other public folder stores have.  This is an important point – public folder databases are aware of their environment surroundings.  It’s this awareness that has implications for recovery.

The Replication State Table

Here’s a quick visualization of how a public folder change is propagated from one server to another. This table simulates the replication state table which is internal to every server. There are four columns – the first represents the replication details (the CNsets), and the next three represent the same folder on each of the three servers. In essence, this table shows you what each server knows about other server’s knowledge of this particular folder. Please note that this is a simplified version of the replication state table – it’s actually quite a bit more complicated than this, but this is all the detail 99.99% of engineers will ever need.

In this example, Folder1 has been replicated to three systems – PFS1, PFS2, and PFS3 – and public folder replication is fully up-to-date. The servers know what they’ve sent to their replication partners, and what’s been replicated back to them. Since end users could conceivably make updates on any of the servers, they each have their own CN sets for the same folder.

Details From Folder1 on PFS1 Folder1 on PFS2 Folder1 on PFS3
PFS1 Last sent CN PFS1:10 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS2 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

Last sent CN PFS2:20 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS3 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

Last sent CN PFS3:30

An end user connected to PFS1 makes a change, which PFS1 assigned change number 11. The replication state table on PFS1 is updated to reflect this new CN.

Details From Folder1 on PFS1 Folder1 on PFS2 Folder1 on PFS3
PFS1 Last sent CN PFS1:11 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS2 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

Last sent CN PFS2:20 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS3 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

Last sent CN PFS3:30

PFS1 packages this change (which we assume is the only one made to Folder1) and sends it to PFS2 and PFS3, which update their own replication state tables.

Details From Folder1 on PFS1 Folder1 on PFS2 Folder1 on PFS3
PFS1 Last sent CN PFS1:11 FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS2 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

Last sent CN PFS2:20 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS3 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

Last sent CN PFS3:30

Both PFS2 and PFS3 apply the changes, and since those two systems received the change from PFS1, they also update their “knowledge” of PFS1. Notice that PFS1 does not update its entries for PFS2 and PFS3 – while it has sent the content to them, it hasn’t received confirmation that they’ve applied that change. [Because public folder replication messages are delivered via Hub Transport, public folder stores don’t directly interact and so never assume that the updates were delivered and applied.]

Continuing with our example, an end user makes a change to Folder1 on PFS3:

Details From Folder1 on PFS1 Folder1 on PFS2 Folder1 on PFS3
PFS1 Last sent CN PFS1:11 FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS2 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

Last sent CN PFS2:20 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS3 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

Last sent CN PFS3:31

That change is now replicated to PFS1 and PFS2:

Details From Folder1 on PFS1 Folder1 on PFS2 Folder1 on PFS3
PFS1 Last sent CN PFS1:11 FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS2 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

Last sent CN PFS2:20 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS3 FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-31

FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-31

Last sent CN PFS3:31

Note that when PFS3 sent out its replication message, it included not only its own update, but also the fact that it had received update 11 from PFS1.

Again, while every server has the most up-to-date content for Folder1, they don’t necessarily know that every replica is up-to-date. [PFS1, for example, “thinks” that PFS2 is out of date, while PFS3 “thinks” that both PFS1 and PFS2 are out of date.] It’s important to note that this isn’t a problem – by only encapsulating status messages in outgoing replication, Exchange avoids saturating the network with constant messages from various servers confirming the receipt of recent replication messages.

Backfill Replication

However, from time to time, a server loses its connection to its replication partners, either through network failure, service failure, or other causes. When it does, its replication state table no longer receives updates to the CNs held by its partners for their replicas. In other words, its replication state table is outdated. When that server reconnects with its partners, and receives a new message, it may find that the CN on that new message is much higher than what it expected. Using the previous example, imagine that PFS3 is isolated from PFS1 and PFS2 due to a server failure, and does not receive updates to Folder1 from the other servers for several hours. The resulting table might look like this:

Details From Folder1 on PFS1 Folder1 on PFS2 Folder1 on PFS3 (OFFLINE)
PFS1 Last sent CN PFS1:16 FID1-123:PFS1:1-16

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS2 FID1-123:PFS1:1-16

FID1-123:PFS2:1-28

FID1-123:PFS3:1-30

Last sent CN PFS2:28 FID1-123:PFS1:1-10

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS3 FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-31

FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-31

Last sent CN PFS3:31

Notice that PFS1 is aware that the most recent replication message from PFS2, for change number 28, also included information about PFS2’s knowledge of PFS1 (namely, that PFS2 receives PFS1’s update numbers 12 to 16). PFS3 has not received any of these recent updates.

However, when PFS3 is brought back online, and receives a new replication message, it suddenly learns of the missing messages. This triggers a backfill request– a request from PFS3 to the source server for the missing content.

Details From Folder1 on PFS1 Folder1 on PFS2 Folder1 on PFS3
PFS1 Last sent CN PFS1:17 FID1-123:PFS1:1-17

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

FID1-123:PFS1:1-11, 17

FID1-123:PFS2:1-20

FID1-123:PFS3:1-30

PFS2 FID1-123:PFS1:1-16

FID1-123:PFS2:1-28

FID1-123:PFS3:1-30

Last sent CN PFS2:28 FID1-123:PFS1:1-16

FID1-123:PFS2:1-28

FID1-123:PFS3:1-30

PFS3 FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-31

FID1-123:PFS1:1-11

FID1-123:PFS2:1-20

FID1-123:PFS3:1-31

Last sent CN PFS3:31

Backfill Request PFS1:12-16

Backfill Request PFS2:21-28

Notice that PFS3 is missing updates 12 through 16 for PFS1, and 21 through 28 for PFS2. PFS3 will request the missing content from any server that it believes has that content, which in this case would mean either PFS1 or PFS2. How does PFS3 know that both servers have the content? Because the replication message from PFS1, which included change number 17, included the information about the CN sets for PFS1, PFS2, and PFS3.

Strictly speaking, Exchange doesn’t issue these backfill requests right away – it waits a few hours (six or more, depending on the situation) before sending them out, just in case one of its replication partners happens to send that missing content. If a specific update hasn’t been received after the backfill timeout is reached, Exchange then generates that backfill request and sends it to the replication partners. This process is detailed in the “Backfill Requests and Backfill Messages” section of the TechNet page on “Understanding Public Folder Replication” at http://technet.microsoft.com/en-us/library/bb629523.aspx#Backfill.

Removing or Deleting Replicas

When you remove a public folder replica, the owning public folder database contacts all other database to find out if they have all of the content that’s contained within the replica that’s about to be removed.  It does so by sending out a status message that contains the CNs for its replica of the folder. For example, if I were to remove the replica of Folder1 from PFS3, it would send a message to PFS1 and PFS2 confirming that between the two of them, they have every update from PFS3 from 1 to 31. [This is an important point: the content doesn’t need to be on one server. As long as the content exists somewhere in the organization, the replica can be removed.] If PFS3 had any unique content that neither PFS1 nor PFS2 had, it would replicate those items to its replication partners. Once it has confirmed that it no longer has any unique content, the public folder store removes that replica.

However, when you delete a public folder outright (as in, remove all replicas), there’s no need to preserve content, so it’s deleted from every public folder store.  This is why it’s vital that public folder administrators understand the difference between removing a replica (with Set-PublicFolder -Replicas) and deleting a public folder (with Remove-PublicFolder).

These changes to replica lists and outright deletions are transmitted just like any other public folder change – as hierarchy replication messages, complete with their own CNs.  If I remove the replica of Folder1 from PFS1, that change will go to PFS2 and PFS3 so that they know that they no longer need to replicate new content for Folder1 to PFS1.  Likewise, if I delete Folder1, it will be deleted from all of the databases and removed from the hierarchy as well.  The replication state table keeps track of changes to hierarchy too, and so knows which folders exist in the organization and which don’t. It is this tracking mechanism that prevents us from simply restoring a public folder database and reintroducing the deleted folders into the environment.

Recovery of Deleted Public Folders

In part one of this blog, I outlined a process for safely and successfully restoring public folders which were accidentally deleted from the environment. Step six of the procedure reads, in part, “Copy each of the folders you wish to restore. [Although the new folders will have similar names to the originals, the underlying folder IDs (FIDs) are different.]” I’ve added italics to highlight the key point – when you copy (clone) public folders, you’re really creating new folders. They may bear the same name as the originals, but the folder IDs are different. So although my cloned copy of Folder1 may look like the original Folder1, and contain the same items as Folder1, none of the replication messages for the original Folder1 will apply to it, because it’ll have a completely different FID. This new folder is added to the hierarchy, and because end users see the name, not the FID, they’ll simply use it as they would the original folder.

Troubleshooting Replication

If you’re looking for troubleshooting information, look no further than Bill Long’s excellent four-part blog series on public folders:

Summary

Public folders use their own replication mechanism, where changes are tracked in an internal, non-editable table and communicated to replication partners alongside the actual content changes. The public folder hierarchy follows the same principles, and so changes made to the hierarchy are replicated to all public folder databases in the environment. Understanding the replication mechanism helps an administrator understand not only disaster recovery, but troubleshooting as well.

07/10/2012 Posted by | Exchange server, Public Folders, Recovering/Restore | , , | Leave a comment

How To Allow Relaying in Exchange 2010 and Exchange 2007

In Exchange Server 2003, you can allow anonymous SMTP hosts to relay mail by adding their IP address(es) in SMTP Virtual Server Properties | Access tab | Relay. Hosts that require anonymous relay capability include application servers and devices such as copiers, which scan documents and send them as email attachments.

Screenshot: Allowing relaying on Exchange Server 2003 SMTP Virtual Server
Figure 1: Controlling relay restrictions in Exchange Server 2003

Starting with Exchange Server 2007, Exchange implemented its own SMTP protocol stack – unlike Exchange Server 2003/2000, you no longer need to install the SMTP service from IIS. SMTP Virtual Servers have been replaced by Receive Connectors. Understandably, the way you allow relaying has changed as well.

Do you really need to allow relaying?

Before you setup anonymous relaying, it’s important to understand the need for relaying. If your application servers or devices like copiers need to send mail only to internal recipients – i.e. mail to addresses for which Exchange has an Accepted Domain (or a Recipient Policy in Exchange Server 2003/2000) and therefore will receive inbound mail for, it is not considered relaying. The application server or device should be able to do this without any configuration on Exchange.

Recipient Policies and Exchange Server 2010/2007

In Exchange 2003, Recipient Policies tell Exchange which domains to receive inbound email for, and to generate email addresses for recipients using those domains. Exchange 2007 splits this functionality into two parts:

  1. Accepted Domains: As the name suggests, Accepted Domain tells Exchange which domain to accept inbound email for
  2. Email Address Policies which actually generate the email addresses

In Exchange Server 2003/2000, you use Active Directory Users & Computers (ADUC) to create recipients such as user accounts and distribution groups. Exchange’s Recipient Update Service (RUS) monitors Active Directory for new recipients or changes to existing recipients and applies Recipient Policies.

In Exchange 2007 and later, there’s no RUS (or its role is significantly minimized that it’s safe to say there’s no RUS). Recipients are provisioned in Exchange using the Exchange Management Console (EMC) or the Exchange Management Shell (EMS) and Email Address Policies are applied in real-time.

Just like previous versions, Exchange 2010/2007 allow authenticated relaying by default. So if your application server or device can authenticate, you must look at configuring them to do so and avoid allowing anonymous relaying. However, some applications or devices may not be able to authenticate. You may need to allow anonymous relaying when the application server or device receives the SMTP error message:

550 5.7.1 Unable to relay

Relaying: The easy way, and the secure way

The best way to allow unauthenticated relaying, or certainly the more secure and recommended one, is to create or use a Receive Connector dedicated for this purpose. I recommended this approach even on Exchange Server 2003/2000 — it’s not a good idea to use your Internet-exposed SMTP virtual server to allow anonymous relaying, even if restricted to specified IP addresses.

Scott Landry wrote about this recently on the Exchange team blog in “Allowing application servers to relay off Exchange Server 2007“.

To create a new Receive Connector, you need another IP address on your Exchange server.

The other alternative is to create a new Receive Connector that listens on a different port instead of the default SMTP port (TCP port 25). Most app servers and devices don’t like this (which shouldn’t be a surprise, because these are coded by the same developers who decided against providing for authenticated SMTP) and many won’t let you configure an alternate port for sending SMTP mail. Rather than mess with non-default ports for SMTP, and having to configure all clients that need to submit to it to also use the same non-default port, it’s best to add another IP address to your Exchange server and create a new Receive Connector.

Receive Connector Bindings in Exchange 2010/2007

Server processes communicating using TCP/IP listen on a particular port number on a given network interface or IP address. This combination of IP address + port number is known as a socket or binding. Two processes can’t use the same socket at the same time— each needs to have a unique binding. In Exchange 2003, SMTP Virtual Servers bind to a socket, specified by a unique combination of IP address + port number. This means two SMTP Virtual Servers can’t bind to the same IP address + Port combination.

In Exchange 2010/2007, Receive Connectors also consider the RemoteIPRanges — the IP addresses or subnets that are allowed to connect to a Receive Connector, in addition to the IP address + port combination, as a unique binding. This means you can create more than one Receive Connectors using the same IP address + port combination, but different RemoteIPRanges. This allows you to enforce different settings for different SMTP hosts that connect to the same IP address + port. .

Allow relaying: The easy way

With the new IP address added to the Exchange server – let’s say it is 192.168.1.17, and your app server, device or copier that needs to relay is 192.168.1.100, fire up Exchange shell and use the following command:

New-ReceiveConnector -Name RelayConnector -usage Custom -Bindings ’192.168.1.17:25′ -fqdn server.domain.com -RemoteIPRanges 192.168.1.100 -server MYEXCHANGESERVER -permissiongroups ExchangeServers -AuthMechanism ‘TLS, ExternalAuthoritative’

What this does:

  • Creates a new Receive Connector called RelayConnector
  • Specifies the usage type Custom
  • Binds the Receive Connector to port 25 on IP address 192.168.1.17
  • Gives it the FQDN of server.domain.com
  • Allows only the host with the IP address 192.168.1.100 to connect to it (specified by the RemoteIPRanges parameter)
  • Additionally, and most importantly, it assigns the ExchangeServers permission group to it, and disables authentication. When you select ExternalAuthoritative for authentication, you’re telling Exchange that you completely trust the IP address(es) or subnets specified in the RemoteIPRanges parameter (192.168.1.100) and you have another authentication mechanism outside of Exchange, such as IPSec, to authenticate.

This also bypasses all security for messages received from that IP address. Because Exchange treats all hosts specified in RemoteIPRanges as trusted, it doesn’t apply anti-spam filters, doesn’t enforce message size limits, resolves P2 headers, and allows sending on behalf of users. Going back to Exchange Server 2003, this is somewhat similar to adding the sending host’s address to Connection Filtering‘s Global Accept list.

A better, more secure way to allow relaying

If you want it to be more secure, you can create a Receive Connector with PermissionGroups set to AnonymousUsers:

New-ReceiveConnector -Name RelayConnector -usage Custom -Bindings ’192.168.1.17:25′ -fqdn server.domain.com -RemoteIPRanges 192.168.1.100 -server MYEXCHANGESERVER -permissiongroups AnonymousUsers

Notice, we’ve left out the AuthMechanism parameter in the above command. However, we’re still restricting it to a particular IP address— 192.168.1.100. The big difference from the previous approach is we’re not treating the host as trusted.

Next, allow anonymous users to relay. This is done by allowing anonymous users the extended right ms-Exch-SMTP-Accept-Any-Recipient for this Connector:

Get-ReceiveConnector RelayConnector | Add-ADPermission -User “NT AUTHORITY\ANONYMOUS LOGON” -ExtendedRights “ms-Exch-SMTP-Accept-Any-Recipient”

Exchane 2010/2007 and the transport permissions model

In Exchange 2010/2007, you can assig granular permissions to security principals on Receive Connectors and Send Connectors. For instance, if you want to have messages from a certain sender bypass Exchange’s anti-spam filters, you can also assign the ms-Exch-Bypass-Anti-Spam permission to that sender on a Receive Connector. Note, however, that the sender’s identity can only be established if they’re authenticated. Mail from all unauthenticated senders, which includes most Internet mail, is considered as being received from Anonymous (permissions assigned to NT AUTHORITY\ANONYMOUS LOGON apply).

For more information about transport permissions in Exchange 2010, check out Understanding Receive Connectors and Understanding Send Connectors. For Exchange 2007, see “Exchange Server 2007 Transport Permissions Model” in Exchange Server 2007 documentation.

What’s the difference?

The difference between the 2 approaches can be seen when you send test messages, as shown in the following screenshot:

Screenshot: Messages from both Connectors shown in Microsoft Outlook
Figure 2:The difference between the 2 approaches can be seen in how messages are displayed in email clients

The first message at 9:22 AM is sent by the first Connector, where the message received without authentication actually shows up as sent by me – the P2 headers are resolved. Whereas the second message at 9:34 AM actually shows up with the sender’s SMTP address.

The second message also went through the anti-spam filters – a quick check of the message headers reveals the antispam headers.

Screenshot: Message headers showing antispam headers
Figure 3: Messages received using the second method do not bypass anti-spam filters by default

05/03/2012 Posted by | Exchange server, Powershell, Recive Connector, Relaying | , , , | Leave a comment

Exchange Server and Update Rollups Builds Numbers

Here is the complete overview of exchange builds number and the link to their patch and update rollups.

Exchange Server Release dates

Product name Build number Date
 Microsoft Exchange Server 2003  6.5.6944  6/30/2003
 Microsoft Exchange Server 2003 SP1  6.5.7226  5/25/2004
 Microsoft Exchange Server 2003 SP2  6.5.7638  10/19/2005
 Microsoft Exchange Server 2007  8.0.685.24  12/9/2006
 Microsoft Exchange Server 2007  8.0.685.25  12/9/2006
 Microsoft Exchange Server 2007 SP1  8.1.240.6  11/29/2007
 Microsoft Exchange Server 2007 SP2  8.2.176.2  8/24/2009
 Microsoft Exchange Server 2007 SP3  8.3.083.6  6/20/2010
 Microsoft Exchange Server 2010  14.0.639.21  11/9/2009
 Microsoft Exchange Server 2010 SP1  14.1.218.15  8/24/2010
 Microsoft Exchange Server 2010 SP2  14.2.247.5  12/4/2011

Exchange Server 2007 Service Pack 1

Product name Build number Date KB
 Microsoft Exchange Server Exchange 2007 SP1  8.1.240.6  11/29/2007
 Update Rollup 1 for Exchange Server 2007 Service Pack 1  8.1.263.1  2/28/2008  KB945684
 Update Rollup 2 for Exchange Server 2007 Service Pack 1  8.1.278.2  5/8/2008  KB948016
 Update Rollup 3 for Exchange Server 2007 Service Pack 1  8.1.291.2  7/8/2008  KB949870
 Update Rollup 4 for Exchange Server 2007 Service Pack 1  8.1.311.3  10/7/2008  KB952580
 Update Rollup 5 for Exchange Server 2007 Service Pack 1  8.1.336.1  11/20/2008  KB953467
 Update Rollup 6 for Exchange Server 2007 Service Pack 1  8.1.340.1  2/10/2009  KB959241
 Update Rollup 7 for Exchange Server 2007 Service Pack 1  8.1.359.2  3/18/2009  KB960384
 Update Rollup 8 for Exchange Server 2007 Service Pack 1  8.1.375.2  5/19/2009  KB968012
 Update Rollup 9 for Exchange Server 2007 Service Pack 1  8.1.393.1  7/17/2009  KB970162
 Update Rollup 10 for Exchange Server 2007 Service Pack 1  8.1.436.0  4/9/2010  KB981407


Exchange Server 2007 Service Pack 2

Product name Build number Date KB
 Microsoft Exchange Server 2007 SP2  8.2.176.2  8/24/2009
 Update Rollup 1 for Exchange Server 2007 Service Pack 2  8.2.217.3  11/19/2009  KB971534
 Update Rollup 2 for Exchange Server 2007 Service Pack 2  8.2.234.1  1/22/2010  KB972076
 Update Rollup 3 for Exchange Server 2007 Service Pack 2  8.2.247.2  3/17/2010  KB979784
 Update Rollup 4 for Exchange Server 2007 Service Pack 2  8.2.254.0  4/9/2010  KB981383
 Update Rollup 5 for Exchange Server 2007 Service Pack 2  8.2.305.3  12/7/2010  KB2407132

 

Exchange Server 2007 Service Pack 3

Product name Build number Date KB
 Microsoft Exchange Server 2007 SP3  8.3.083.6  6/20/2010
 Update Rollup 1 for Exchange Server 2007 Service Pack 3  8.3.106.2  9/9/2010  KB2279665
 Update Rollup 2 for Exchange Server 2007 Service Pack 3  8.3.137.3  12/10/2010  KB2407025
 Update Rollup 3 for Exchange Server 2007 Service Pack 3  8.3.159.0  3/2/2011  KB2492691
 Update Rollup 3-v2 for Exchange Server 2007 Service Pack 3  8.3.159.2  3/30/2011  KB2530488
 Update Rollup 4 for Exchange Server 2007 Service Pack 3  8.3.192.1  7/7/2011  KB2509911
 Update Rollup 5 for Exchange Server 2007 Service Pack 3  8.3.213.1  9/21/2011  KB2602324
 Update Rollup 6 for Exchange Server 2007 Service Pack 3  8.3.245.2  1/25/2012  KB2608656


Exchange Server 2010

Product name Build number Date KB
 Microsoft Exchange Server 2010 RTM  14.0.639.21  11/9/2009
 Update Rollup 1 for Exchange Server 2010  14.0.682.1  12/9/2009  KB976573
 Update Rollup 2 for Exchange Server 2010  14.0.689.0  3/4/2010  KB979611
 Update Rollup 3 for Exchange Server 2010  14.0.694.0  4/9/2010  KB981401
 Update Rollup 4 for Exchange Server 2010  14.0.702.1  6/17/2010  KB982639
 Update Rollup 5 for Exchange Server 2010  14.0.726.0  12/13/2010  KB2407113


Exchange Server 2010 Service Pack 1

Product name Build number Date KB
 Microsoft Exchange Server 2010 SP1  14.1.218.15  8/24/2010
 Update Rollup 1 for Exchange Server 2010 SP1  14.1.255.2  10/4/2010  KB2407028
 Update Rollup 2 for Exchange Server 2010 SP1  14.1.270.1  12/9/2010  KB2425179
 Update Rollup 3 for Exchange Server 2010 SP1  14.1.289.3  3/7/2011  KB2492690
 Update Rollup 3-v3 for Exchange Server 2010 SP1  14.1.289.7  4/1/2011  KB2529939
 Update Rollup 4 for Exchange Server 2010 SP1  14.1.323.1  6/22/2011  KB2509910
 Update Rollup 4-v2 for Exchange Server 2010 SP1  14.1.323.6  7/27/2011  KB2579150
 Update Rollup 5 for Exchange Server 2010 SP1  14.1.339.1  8/23/2011  KB2582113
 Update Rollup 6 for Exchange Server 2010 SP1  14.1.355.2 10/27/2011  KB2608646

Exchange Server 2010 Service Pack 2

Product name Build number Date KB
 Microsoft Exchange Server 2010 SP2  14.2.247.5  12/4/2011
 Update Rollup 1 for Exchange Server 2010 SP2  14.2.283.3  2/13/2012  KB2645995

03/08/2012 Posted by | Exchange server | , , , , | Leave a comment

Powershell commands

# Create a new mailbox-enabled user
new-Mailbox -alias testmbx -name TestMailbox -database “Mailbox Database” -org Users -UserPrincipalName testmbx@example.com
Password: <userpassword>

# Create a new resource mailbox (Conference Room or Equipment)
New-Mailbox -alias testresmbx -name TestResourceMailbox -database “Mailbox Database” -org Users <-Room | -Equipment>  -UserPrincipalName testresourcembx@example.com

# Create a shared mailbox
new-Mailbox -alias testsharedmbx -name TestSharedMailbox -database “Mailbox Database” -org Users -shared -UserPrincipalName testsharedmbx@example.com

# Create a new linked mailbox
New-Mailbox -alias testlinkedmbx -name TestLinkedMailbox -database “Mailbox Database” -org Users -LinkedMasterAccount account@userdomain.com -LinkedDomainController userdomain-dc-01 -UserPrincipalName testmbx@example.com

# Mail-enable an existing user as a user mailbox
Enable-Mailbox logondisableduser -database “Mailbox Database”

# Mail-enable an existing (AD logon-disabled) user as a resource mailbox (Conference Room or Equipment)
Enable-Mailbox logondisableduser <-Room | -Equipment> -database “Mailbox Database”

# Mail-enable an existing (AD logon-disabled) user as a linked mailbox
Enable-Mailbox logondisableduser -database “Mailbox Database” -LinkedMasterAccount account@userdomain.com -LinkedDomainController userdomain-dc-01

# Move an individual mailbox
Move-Mailbox testmbx -targetdatabase “Mailbox Database”

# Move all mailboxes stored on a server to a target mailbox database
Get-Mailbox -server testserver | Move-Mailbox -targetdatabase “Mailbox Database”

# Disable one individual mailbox
Disable-Mailbox testmbx

# Disable all mailboxes stored on a server
Get-Mailbox -server testserver | Disable-Mailbox

# Remove one individual mailbox-enabled user
Remove-Mailbox testmbx

# Remove all mailbox-enabled users stored on a server
Get-Mailbox -server testserver | Remove-Mailbox

# Set storage quotas
Set-Mailbox testmbx -UseDatabaseQuotaDefaults:$False -IssueWarningQuota 90MB -ProhibitSendQuota 95MB -ProhibitSendReceiveQuota 100MB

# Set a mailbox to forward mail to another recipient and recipients limits
Set-Mailbox testmbx -DeliverToMailboxAndForward:$True -ForwardingAddress testuser@example.com -RecipientLimits 10

# Grant “Send on behalf” permission
Set-Mailbox testmbx -GrantSendOnBehalfTo testuser

# Grant “Send-As” permission
Add-ADPermission testmbx -ExtendedRights Send-As -user testuser

# Grant full mailbox access permission
Add-MailboxPermission testmbx -AccessRights FullAccess -user testuser

#For Creating Resource
New-Mailbox -Name:”Resourcecal” -Alias:Resourcecal -OrganizationalUnit:Users -Database:”Database Name” -UserPrincipalName:”Resourcecal@domain.com” -DisplayName:”Resource Mailbox” -Room

#To Enable Auto-Acceptance
Set-MailboxCalendarSettings Resourcecal -AutomateProcessing:Autoaccept

#New mailbox
New-Mailbox -Name:”Resource1″ -Alias:Resource1 -OrganizationalUnit:Users -Database:”Database Name” -UserPrincipalName:”Resource1@domain.com” -DisplayName:”Resource Mailbox” -Room

#how to set autoaccept
Set-MailboxCalendarSettings Resource1 -AutomateProcessing:Autoaccept

#how to give a user full access to a resource (sentalbord)
Add-MailboxPermission -Identity:Resource1 -AccessRights:fullaccess -User:user1

#how to specify the delegate for the resource mailbox.
Set-MailboxCalendarSettings Resource1 -ResourceDelegates:Delegate1

03/08/2012 Posted by | Exchange server, Powershell | , , , | Leave a comment

List of Powershell cmdlets for Exchange 2007/Exchange 2010

List of Powershell cmdlets for Exchange 2007/Exchange 2010
cmdlet cmdlet name client access hub transport mailbox edge transport unified messaging
AcceptedDomain Get-AcceptedDomain X X
New-AcceptedDomain X X
Remove-AcceptedDomain X X
Set-AcceptedDomain X X
ActiveSyncConnectivity Test-ActiveSyncConnectivity X
ActiveSyncDevice Clear-ActiveSyncDevice X
Remove-ActiveSyncDevice X
ActiveSyncDeviceStatistics Get-ActiveSyncDeviceStatistics X
ActiveSyncLog Export-ActiveSyncLog X
ActiveSyncMailboxPolicy Get-ActiveSyncMailboxPolicy X
New-ActiveSyncMailboxPolicy X
Remove-ActiveSyncMailboxPolicy X
Set-ActiveSyncMailboxPolicy X
ActiveSyncVirtualDirectory Get-ActiveSyncVirtualDirectory X
New-ActiveSyncVirtualDirectory X
Remove-ActiveSyncVirtualDirectory X
Set-ActiveSyncVirtualDirectory X
AddressList Get-AddressList X
Move-AddressList X
New-AddressList X
Remove-AddressList X
Set-AddressList X
Update-AddressList X
AddressRewriteEntry Get-AddressRewriteEntry X
New-AddressRewriteEntry X
Remove-AddressRewriteEntry X
Set-AddressRewriteEntry X
ADPermission Add-ADPermission X X X X X
Get-ADPermission X X X X X
Remove-ADPermission X X X X X
ADSite Get-AdSite X
Set-AdSite X X
AdSiteLink Get-AdSiteLink X
Set-AdSiteLink X
AgentLog Get-AgentLog X X
AntispamUpdates Disable-AntispamUpdates X X
Enable-AntispamUpdates X X
Get-AntispamUpdates X X
AttachmentFilterEntry Add-AttachmentFilterEntry X
Get-AttachmentFilterEntry X
Remove-AttachmentFilterEntry X
AttachmentFilterListConfig Get-AttachmentFilterListConfig X
Set-AttachmentFilterListConfig X
AutoDiscoverConfig Export-AutoDiscoverConfig X
AutodiscoverVirtualDirectory Get-AutodiscoverVirtualDirectory X
New-AutodiscoverVirtualDirectory X
Remove-AutodiscoverVirtualDirectory X
Set-AutodiscoverVirtualDirectory X
AvailabilityAddressSpace Add-AvailabilityAddressSpace X
Get-AvailabilityAddressSpace X
Remove-AvailabilityAddressSpace X
AvailabilityConfig Get-AvailabilityConfig X
Set-AvailabilityConfig X
CASMailbox Get-CASMailbox X
Set-CASMailbox X
ClientAccessServer Get-ClientAccessServer X
Set-ClientAccessServer X
ClusteredMailboxServer Move-ClusteredMailboxServer X
Start-ClusteredMailboxServer X
Stop-ClusteredMailboxServer X
ClusteredMailboxServerStatus Get-ClusteredMailboxServerStatus X
Contact Get-Contact X
Set-Contact X
ContentFilterConfig Get-ContentFilterConfig X X
Set-ContentFilterConfig X X
ContentFilterPhrase Add-ContentFilterPhrase X X
Get-ContentFilterPhrase X X
Remove-ContentFilterPhrase X X
ContinuousReplicationHostName Disable-ContinuousReplicationHostName X
Bitmap Enable-ContinuousReplicationHostName X
Database Dismount-Database X
Mount-Database X
DatabaseCopy Enable-DatabaseCopy X
DatabasePath Move-DatabasePath X
DetailsTemplate Get-DetailsTemplate X
Restore-DetailsTemplate X
Set-DetailsTemplate X
DistributionGroup Disable-DistributionGroup X
Enable-DistributionGroup X
Get-DistributionGroup X
New-DistributionGroup X
Remove-DistributionGroup X
Set-DistributionGroup X
DistributionGroupMember Add-DistributionGroupMember X
Get-DistributionGroupMember X
Remove-DistributionGroupMember X
DynamicDistributionGroup Get-DynamicDistributionGroup X
New-DynamicDistributionGroup X
Remove-DynamicDistributionGroup X
Set-DynamicDistributionGroup X
EdgeSubscription Get-EdgeSubscription X X
New-EdgeSubscription X X
Remove-EdgeSubscription X X
EdgeSynchronization Start-EdgeSynchronization X X
Test-EdgeSynchronization X X
EmailAddressPolicy Get-EmailAddressPolicy X
New-EmailAddressPolicy X
Remove-EmailAddressPolicy X
Set-EmailAddressPolicy X
Update-EmailAddressPolicy X
EventLogLevel Get-EventLogLevel X X X X X
Set-EventLogLevel X X X X X
ExchangeAdministrator Add-ExchangeAdministrator X
Get-ExchangeAdministrator X
Remove-ExchangeAdministrator X
ExchangeCertificate Enable-ExchangeCertificate X X
Export-ExchangeCertificate X X
Get-ExchangeCertificate X X
Import-ExchangeCertificate X X
New-ExchangeCertificate X
Remove-ExchangeCertificate X X
ExchangeSearch Test-ExchangeSearch X
ExchangeServer Get-ExchangeServer X X X X X
Set-ExchangeServer X X X X X
FileDistributionService Update-FileDistributionService X X
ForeignConnector Get-ForeignConnector X X
New-ForeignConnector X X
Remove-ForeignConnector X X
Set-ForeignConnector X X
GlobalAddressList Get-GlobalAddressList X
New-GlobalAddressList X
Remove-GlobalAddressList X
Set-GlobalAddressList X
Update-GlobalAddressList X
Group Get-Group X
Set-Group X
ImapConnectivity Test-ImapConnectivity X
ImapSettings Get-IMAPSettings X
Set-IMAPSettings X
IPAllowListConfig Get-IPAllowListConfig X X
Set-IPAllowListConfig X X
IPAllowListEntry Add-IPAllowListEntry X X
Get-IPAllowListEntry X X
Remove-IPAllowListEntry X X
IPAllowListProvider Add-IPAllowListProvider X X
Get-IPAllowListProvider X X
Remove-IPAllowListProvider X X
Set-IPAllowListProvider X X
Test-IPAllowListProvider X X
IPAllowListProvidersConfig Get-IPAllowListProvidersConfig X X
Set-IPAllowListProvidersConfig X X
IPBlockListConfig Get-IPBlockListConfig X X
Set-IPBlockListConfig X X
IPBlockListEntry Add-IPBlockListEntry X X
Get-IPBlockListEntry X X
Remove-IPBlockListEntry X X
IPBlockListProvider Add-IPBlockListProvider X X
Get-IPBlockListProvider X X
Remove-IPBlockListProvider X X
Set-IPBlockListProvider X X
Test-IPBlockListProvider X X
IPBlockListProvidersConfig Get-IPBlockListProvidersConfig X X
Set-IPBlockListProvidersConfig X X
Bitmap JournalRule Disable-JournalRule X
Enable-JournalRule X
Get-JournalRule X
New-JournalRule X
Remove-JournalRule X
Set-JournalRule X
LogonStatistics Get-LogonStatistics X
Mailbox Connect-Mailbox X
Disable-Mailbox X
Enable-Mailbox X
Export-Mailbox X
Get-Mailbox X
Import-Mailbox X
Move-Mailbox X
New-Mailbox X
Remove-Mailbox X
Restore-Mailbox X
Set-Mailbox X
MailboxCalendarSettings Get-MailboxCalendarSettings X
Set-MailboxCalendarSettings X
MailboxDatabase Clean-MailboxDatabase X
Get-MailboxDatabase X
New-MailboxDatabase X
Remove-MailboxDatabase X
Set-MailboxDatabase X
MailboxFolderStatistics Get-MailboxFolderStatistics X
MailboxPermission Add-MailboxPermission X
Get-MailboxPermission X
Remove-MailboxPermission X
MailboxServer Get-MailboxServer X
Set-MailboxServer X
MailboxStatistics Get-MailboxStatistics X
MailContact Disable-MailContact X
Enable-MailContact X
Get-MailContact X
New-MailContact X
Remove-MailContact X
Set-MailContact X
MailFlow Test-Mailflow X
MailPublicFolder Disable-MailPublicFolder X
Enable-MailPublicFolder X
Get-MailPublicFolder X
Set-MailPublicFolder X
MailUser Disable-MailUser X
Enable-MailUser X
Get-MailUser X
New-MailUser X
Remove-MailUser X
Set-MailUser X
ManagedContentSettings Get-ManagedContentSettings X
New-ManagedContentSettings X
Remove-ManagedContentSettings X
Set-ManagedContentSettings X
ManagedFolder Get-ManagedFolder X
New-ManagedFolder X
Remove-ManagedFolder X
Set-ManagedFolder X
ManagedFolderAssistant Start-ManagedFolderAssistant X
Stop-ManagedFolderAssistant X
ManagedFolderMailboxPolicy Get-ManagedFolderMailboxPolicy X
New-ManagedFolderMailboxPolicy X
Remove-ManagedFolderMailboxPolicy X
Set-ManagedFolderMailboxPolicy X
MAPIConnectivity Test-MapiConnectivity X
Message Export-Message X X
Get-Message X X
Remove-Message X X
Resume-Message X X
Suspend-Message X X
MessageClassification Get-MessageClassification X

03/08/2012 Posted by | Exchange server, Powershell | , , , | Leave a comment

   

%d bloggers like this: