Exchange 2010 Public Folders: Part 2


This content comes from a chapter removed from my book Microsoft Exchange Server 2010 Inside Out, also available at Amazon.co.uk (including a Kindle edition). The first part of the chapter is available in this post. Now let’s get on with some more discussion about public folders.

Creating new replicas

The default state for a public folder is that a single replica exists in the database where an administrator originally creates the folder unless replicas exist for the parent folder, in which case Exchange creates replicas for the new child folder in the databases where replicas exist for the parent.

Having a single replica of a folder may be the most appropriate state for the folder if all users are able to make reliable connections to the server that hosts the database. However, in large or distributed environments it is common to create several replicas so that users can always make a local connection. We will discuss how to control the process by which Exchange decides to which replica a client should connect in the “Removing public folders” section. For now, let’s review how to create the replica folders.

Configuring replicas for a public folder

Open the public folder management console and locate the folder that you want to replicate. Click Properties and then select the “Replication” tab (Figure 1). You will see the list of databases that currently have replicas and will be able to add new databases. The equivalent EMS command is:

Set-PublicFolder -Identity '\Departments\Finance' -Replicas 'PFDatabase1','PFDatabase2'

Replication is performed through special messages sent between the servers (using SMTP) that host the public folder databases that include the replicas. Each database has a replication schedule that typically replicates new items or other content updates for public folders every 15 minutes. Content is broken up into relatively small (by today’s standards) 300KB messages to ensure fast and efficient distribution. You can force immediate replication by selecting the Update Content option from the action pane. This might be required if a user wanted the immediate distribution of some important information throughout the organization. If you don’t already have the public folder management console fired up and ready to go, it’s probably quicker to invoke the Update-PublicFolder cmdlet from EMS. In this instance, we force replication of the contents of the Press Releases folder using the folder from the database on server ExServer1:

Update-PublicFolder –Identity '\Departments\Marketing\Press Releases' –Server ExServer1

By comparison to folder content, changes to the folder hierarchy are replicated as soon as they occur, so the addition or deletion of a folder should replicate throughout the organization very quickly.

Mail-enabling a public folder

A mail-enabled public folder is able to accept new items via email. If anonymous access is permitted, anyone will be able to create a message, address it to the folder, and send it to Exchange for delivery. A public folder is mail-enabled with the Enable-MailPublicFolder cmdlet. Alternatively, you can select the folder from the Public Folder console and click on the “Mail Enable” option in the action pane. Mail-enabled public folders are listed in the console with a different icon from folders that are not mail-enabled. In this extract from EMC (Figure 2), four mail-enabled public folders are listed.

Viewing mail-enabled public folders

When you mail-enable a public folder, Exchange also reveals it to users in the GAL, albeit with minimal useful detail (Figure 3). It might not be desirable to have public folders shown in the GAL; you might prefer to have users post to the folder by addressing messages to the folder’s SMTP address. These commands mail-enable a public folder and hide it from the GAL:

Enable-MailPublicFolder –Identity '\Departments\Finance\Forms'
Set-PublicFolder –Identity '\Departments\Finance\Forms'
–HiddenFromAddressListEnabled $True

How a mail-enabled public folder appears in the GAL (as seen with OWA)

You can also hide a public folder from Exchange address lists by selecting it in the Public Folder management console, view its properties, navigate to the Exchange General property page, and select the checkbox to hide the folder. Hiding mail-enabled public folders only conceals them from users. Even if you hide a mail-enabled public folder from the Exchange address lists, administrators will continue to see these objects listed in the picker dialogs used to select recipients for various tasks such as adding recipients to distribution groups.

Behind the scenes, when you mail-enable a public folder, Exchange creates a new object for the folder in the Microsoft Exchange System Objects OU. Figure 4 shows the attributes of a mail-enabled public folder as viewed through the ADSIEdit utility. The new object is used to hold properties of the public folder such as the proxy email addresses, mail tips, and so on. The properties of the new object can then be viewed with the Get-MailPublicFolder cmdlet and manipulated with the Set-MailPublicFolder cmdlet.

Viewing the attributes of a mail-enabled public folder with ADSIEdit

The mail-related properties that are available to mailboxes, groups, and contacts are also available for public folders. For example, here’s how to set up moderation for a public folder so that only users from a specific group plus the moderator can post items. Any other attempt has to go through moderation.

Set-MailPublicFolder –Identity '\Departments\Finance' –ModeratedBy 'Redmond, Tony' –MailTip 'Only members of the Finance Department can post to this folder'
–ByPassModerationFromSendersOrMembers 'FinanceUsers' , 'Redmond, Tony'
–ModerationEnabled $True

You can disable a mail-enabled public folder with the Disable-MailPublicFolder cmdlet. This will also remove the Active Directory object and the GAL.

Disable-MailPublicFolder –Identity '\Departments\Finance\Forms'-Confirm:$False

Bad email addresses for email-enabled public folders

No system folder needs to be mail-enabled. However, you may see errors flagged when you apply an email policy to these objects. The likely cause is that these folders were enabled for email in a previous version of Exchange and their names or aliases include spaces or special characters that cannot be used in SMTP addresses, and so are found to be invalid when Exchange attempts to use them to create email addresses according to the email policy. If you see an error like this, you can disable email for the folders and remove their email addresses with this code:

Get-PublicFolder '\non_ipm_subtree' –Recurse –ResultSize Unlimited | Disable-MailPublicFolder –ErroractionSilentlyContinue

Afterwards, you can fix the names of the folders to remove any offending characters from their names or aliases and then re-enable them for mail.

Removing public folders

The Remove-PublicFolder cmdlet deletes a public folder from the public folder hierarchy and removes all content and replicas that exist in public folder databases in the organization. The simplest deletion is to remove just one folder. For example:

Remove-PublicFolder –Identity '\Departments\Finance\Tools' –Confirm:$False

This command works if the folder has no children. If a child folder exists you’ll be told that you can’t delete a parent folder until you first remove any child folders. You can do this with much the same command by adding the –Recurse parameter to force Exchange to locate and remove any child folders before it removes the parent.

Remove-PublicFolder –Identity '\Departments\Finance\Tools' –Recurse –Confirm:$False

In these examples I’ve suppressed the confirmation prompt because I am pretty confident about the folder that I want to delete. A delete of a public folder cannot be reversed as there’s no equivalent of a deleted items folder for public folders or the items that they contain – unless you use the ExFolders utility to recover the deleted folder. Even then, ExFolders might not be able to recover a deleted public folder, so it’s a good idea to be sure that you really want to remove a folder before you proceed to do it.

It’s a good idea to clean up old and obsolete public folders on a regular basis. You can scan for folders that don’t hold a lot of content or haven’t been accessed recently. This command fetches the set of folders in the hierarchy as known in the public folder database on a server and generates statistics for each folder before sorting the set by the last modification time before outputting details into a report.

Get-PublicFolder –Identity '\' -Server ExServer1 -Recurse
-ResultSize Unlimited | Get-PublicFolderStatistics | Select Name, ItemCount, TotalItemSize, LastModificationTime| Sort-Object LastModificationTime
–Descending | Format-Table –AutoSize> C:\Temp\PFReport.txt

Controlling public folder referrals

Any public folder can be replicated to databases on multiple servers. The public folder hierarchy is always replicated to every public folder database so that each server can present a complete view of every public folder that is available in the organization to clients that request this data. The folder hierarchy lists every folder, its permissions, and details of the servers that currently host databases that contain replicas of each folder. Replicas of every folder do not necessarily exist in every public folder database. When public folders exist in an organization, every mailbox database is associated with a public folder database and clients always attempt to connect to folder replicas in the public folder database associated with their mailbox database. If clients need access to a folder replica that is not present in the database that they are currently connected to, Exchange creates a referral to the most appropriate public folder database that contains a replica. You can view the public folder database that is used by a mailbox database by looking at its properties through the Client Settings tab. As you can see in Figure 5, the IT Department database currently uses PFDatabase1, so any connections from mailboxes hosted by this database will go to PFDatabase1. If this isn’t the most appropriate public folder database to use, we can select another one – perhaps a public folder database that is hosted by the same server as the mailbox database.

Selecting a public folder database for a mailbox database

When a mailbox database is created, Exchange checks the available public folder databases to decide which to associate with the new mailbox database. If a public folder database is available on the same server, it is selected. If not, the first public folder (listed alphabetically) in the organization is used. Over time, this leads to a certain imbalance in the workload going to the first public folder database. To check the current allocation of mailbox databases to the available public folder databases:

Get-MailboxDatabase | Select Name, PublicFolderDatabase

You can then move work by updating a mailbox database as follows:

Set-MailboxDatabase -Identity 'IT Department'-PublicFolderDatabase 'PFDatabase2'

The default mechanism used to determine the best referral is based on Active Directory site link costs. First, Exchange looks for servers in the local site to see if there are public folder databases available that contain the required folder. If no local servers are available, Exchange builds a list of available servers that host public folder databases in other sites and orders them by cost. Exchange then attempts to contact each server to see whether they have an available replica and will connect to the first replica folder that it finds.

It is possible to ignore the Active Directory site link costs and use a custom referral list instead. To do this, go to the Organization Configuration node of EMC and then Mailbox, and then select the public folder database with which you want to work. Now click Properties To and then select the Public Folder Referral tab. As expected, the default option is to use Active Directory site costs. However, as shown in Figure 6, you can create a custom list of mailbox servers (that host public folder databases) and assign each a cost from 1 to 100 to have Exchange use this list when it determines client referrals. Costs are prioritized from lower to higher, so you should assign a cost of 1 (one) to the server that you want to direct client referrals to whenever possible and any other value up to 100 for the other servers. The higher the cost value, the less likely Exchange will use it for client referrals.

Setting the referral cost for a public folder database

You can create a custom referral list with EMS too. In the example shown below, we select create a list of three mailbox servers that host public folder databases and assign each server with a different cost to provide Exchange with an order to use to check the servers for public folder replicas. Finally, we tell Exchange to use the custom server list rather than using the default Active Directory site cost.

Set-PublicFolderDatabase -Identity 'ExServer1\PubFolders1'
-CustomReferralServerList 'ExServer2:1','ExServer3:10','ExServer5:25'
-UseCustomReferralServerList $True

About these ads

About Tony Redmond

Exchange MVP, author, and rugby referee
This entry was posted in Exchange, Exchange 2010 and tagged , , , . Bookmark the permalink.

59 Responses to Exchange 2010 Public Folders: Part 2

  1. erdem ustun says:

    thanks.it is a good article about public folder.I have a Question,

    How to create public folders with powershell from csv file which contains publicfolder’s name,username(access,read rights)…etc.

    sample csv file
    name,usercode,rights,smtp
    sectoral division,34567,read,sector@domain.com
    IT,7890,read,IT@domain.com
    IT\Software Enginering,8907,read,Software@domain.com
    IT\Software Enginering\Design Division,67899,read,designer@domain.com
    Network Division,67898,read,network@domain.com
    ….
    when I created first time to use this csv file without checking existing control, and after creating public folders I want to update public folders and others attribute ,have to check csv file compare to exchange public folders and if existing folders ,usercode,rights do nothing, if not exist to create,if exist public folders but usercode is different csv file update new usercode from csv file.

    can you help me about creating public folders from csv with scripting

  2. Pingback: Exchange 2010 Public Folders: Part 3 | Thoughtsofanidlemind's Blog

  3. Tom says:

    We’re in the process of migrating from 2003 to 2010 and have had several years of uncontrolled public folder growth. My PF database is close to 150GB. We’re trying to reduce in size but it’s not that easy. I’ve been looking for information regarding Exchange 2010 and how large a PF database can be. I’ve seen many articles discussing mailbox DB but nothing on PF. What’s your opinion on DB size. Thanks

    • In one respect, a PF database is exactly the same as a mailbox database when it comes to size. As long as you can protect it in terms of being able to handle day-to-day ups and downs, the data can grow as large as you’re comfortable. With PFs, the issue is how many replicas exist of the various folders and how quickly the replicas can backfill a new replica should the need arise. 150GB isn’t an extraordinarily large PF database, but you do have to make sure that you can handle a problem such as a major disk outage or a corruption of a database. I’d be comfortable with three replicas of each major folder (there will always be folders that aren’t very important and remain singular). The problem I see with a 150GB PF database is manageability. How many folders, what do they contain, what are they used for, is a replacement repository available, how and why do folders grow, and so on. Exchange doesn’t really have the best of tools to figure out these questions but I do think that you need to have at least an opinion on this points before you can expect to manage the database successfully.

      TR

  4. Mike says:

    Good articles. I love the cockroaches analogy. One setting on folders in ESM was message replication priority. I understand that now messages are based on database rather than folder properties, but I can’t find where to set the message priority in Exchange 2007/2010. Is it possible to do that? If so, where?

    • According to Exchange 2010 help, the only reference to public folder replication priority is for backfill. Maybe Microsoft hasn’t coded a replication priority in the cmdlets used for Exchange 2007/2010.

      http://technet.microsoft.com/en-us/library/bb629523.aspx

      To select servers to use as a backfill source, Exchange first creates a list of all the servers that have replicas of the folder, and then sorts the list according to the following sequence of criteria:T

      Sort according to server status. Servers that are down or unavailable drop to the end of the list.
      Sort according to preferred backfill server (if any). Exchange checks the public folder database object in Active Directory for a preferred backfill server. This setting is seldom used. In most circumstances, the backfill process operates most efficiently if Exchange selects a backfill server automatically. Most deployments of Exchange don’t need a preferred backfill server. Microsoft Customer Service and Support can provide a script that sets a preferred backfill server if your deployment requires it.
      Sort according to transport cost (lowest to highest). Servers in the same routing group have priority over servers in remote Active Directory sites.
      Sort according to Exchange version (newest to oldest).
      Sort according to the number of necessary changes available on the server (largest to smallest). Servers that don’t have any of the missing changes are dropped from the list.
      If one server doesn’t have all the necessary changes, Exchange selects the next server in the sorted list and sends a backfill request to that server as well. This process is repeated until all of the changes are requested.

  5. Dan Paolera says:

    Ok so my question is if none of my folders are currently set to replicate and I want to replicate them all to my other mailbox server how do I do this without going thru and changing each and every one of them?

    • I believe that PowerShell is the answer:

      Get-PublicFolder -Id “\” -Recurse to get a list of public folders followed by:

      Set-PublicFolder -Replicas ‘NewServer’ to create a replica on the server called “NewServer”

      Of course, I would test things before deploying into production!

      TR

  6. Adham says:

    Thanks for the post Tom.
    I have a naive question for you, as i haven’t worked a lot with PF:
    I’m currently migrating from Exchange 2007 to Exchange 2010, and as you mentioned, PF replication uses SMTP, so do i have to mail enable all the folders, or will they normally replicate without doing that!

    Adham

    • Well, I guess that I am Tony rather than Tom, but to answer the question…

      PF replication occurs in the form of special messages that are handled by the mail transport system. You do not have to mail enable any of the folders. This is only required if you want to address email to a folder and have Exchange deliver the messages to that folder.

      TR

  7. Rhonda says:

    Thanks for your great advice on Exchange issues, Tony – we’ve migrated from Exchange 2003 to Exchange 2010. We had nearly 900 mail-enabled public folders – only about 100 really needed, the rest were created by default due to a poor setting in Exchange 2003. I now need to get a list of all public folders and their aliases but I haven’t been able to find an example of a script that can get that for me. I can only find get-publicfolderstatistics information for single public folders, nothing to generate a list of all public folders and their primary addresses and their aliases. Do you have any examples?

  8. Mike Fox says:

    I have a PowerShell script that collects just about everything from Public Folders, including email addresses. It saves everything to a tab delimited txt file for easy conversion into Excel. It has over 400 lines. Is there a place I can post it to?

  9. Mike Fox says:

    Here is my script to gather Public Folder data. I’m not a scripting guru, so I’m sure it can be made more elegant, but it works for our purposes.

    #Script to gather information on Public Folders
    #It expects to find the file c:\Drop\PFActiveEmail.csv. For us it contains an export of active email addresses.
    #If you don’t need this, create a dummy file with just the header: Email,Rcvd,Seen
    #Under the two “List folder Owners & Publishing Editors” sections you can specify owners you know are present and don’t care
    #to have in the output, e.g. administrators
    #Be sure to specify the server name variable below ($Svr)
    #There is a section for mail-enabled folders as well as nonmail-enabled. In each section you can specify a specific folder
    #or get all of them by uncommenting/commenting the appropriate lines.

    $Date = Get-Date -DisplayHint Date
    $SDate = ($Date).ToShortDateString() -replace(“/”,”-“)
    $Log = “C:\Drop\PFStats$SDate.txt”
    $Active = Import-Csv “c:\Drop\PFActiveEmail.csv” #Active PF addresses compiled from web report. Format: Email,Rcvd,Seen
    $ResultSize = “unlimited”
    $PFHT = @{} #Hash table to track processed folders
    $Svr = “PF301″ #Public Folder server name from which to gather the data

    #Header
    “Public Folder Data as of $Date” >> $Log
    “FolderName`tPath (PFID)`tNmbr Items`tSize`tAssocItemCt`tAssocItemSize`tOldest Content`tNewest Content`tCreation Date`tRules`tEmail Addresses`tActive Email`tCount`tMonths`tOwners`tPublishing Editors`tContributors`tMail Enabled`tMESO`tLegacyExchangeDN`tX400 Address`tOwners`tPFEntryID” >> $Log #File Header

    #Get Data on Mail-Enabled Folders
    #Test Mail PF
    #$TestMPF = “\Eastern Region\Exchanges\USMA\Cadet Show”
    #$MPF = Get-MailPublicFolder -Identity $TestMPF -Server $Svr | select Name, DisplayName, EmailAddresses, LegacyExchangeDN, Identity

    #All Mail Folders
    $MPF = Get-MailPublicFolder -resultsize unlimited -Server $Svr | select Name, DisplayName, EmailAddresses, LegacyExchangeDN, Identity

    $MPFCnt = $MPF.count #Total number of mail-enabled folders
    “Number of Mail Folders: $MPFCnt”
    $Prog = 0 #Progress indicator

    #Get Public Folder Data
    #Test Mail PF
    #$PF = Get-PublicFolder -Identity $TestMPF -Server $Svr | select Identity, EntryID, HasSubFolders, HasRules, MailEnabled

    #Get All Public Folders
    $PF = Get-PublicFolder -Identity “\” -Recurse -ResultSize unlimited -Server $Svr | select Identity, EntryID, HasSubFolders, HasRules, MailEnabled
    $GPFCnt = $PF.count
    “Number of Public Folders: $GPFCnt”

    $MPF | % {
    $CurrMPF = $_
    $MESO = $null #Name attribute of MPF
    $MPFDN = $null #DisplayName of MPF
    $MPFID = $null #Identity of MPF
    $LEDN = $null #LegacyExchangeDN
    $cSMTP = $null #Collection SMTP
    $MESO = $CurrMPF.Name
    $MPFDN = $CurrMPF.DisplayName
    $MPFID = $CurrMPF.Identity
    $LEDN = $CurrMPF.LegacyExchangeDN
    $Prog = $Prog + 1

    #Progress to screen
    “Mail Folder $Prog of $MPFCnt : $MPFDN”

    #Gather email addresses
    $Addrs = $null #SMTP Addresses
    $Addr = $null #Individual SMTP address
    $ActiveE = “Not Mail-enabled” #Status flag
    $cSMTP = $null #Collection of SMTP addresses
    $cX400 = $null #Collection of X400 addresses
    $ActDet = $null #Clear check for mail activity flag
    $Cnt = 0 #Number of times active PF address was seen (top month)
    $Mo = 0 #Number of months active PF address was seen
    $Addrs = $CurrMPF | select -ExpandProperty emailaddresses | %{$_.tostring()}
    $Addrs
    If ($Addrs) {
    $Addrs | % {
    $CurrAddr = $_
    If ($CurrAddr -match “x400:”) {
    $Addr = $CurrAddr.tostring().Substring(5) #Remove X400:
    If ($cX400 -notcontains $Addr) {
    $cX400 += $Addr.tostring() + “, ” #Add address to collection
    }
    }
    If ($CurrAddr -match “smtp:”) {
    $Addr = $CurrAddr.tostring().Substring(5) #Remove smtp:
    If ($cSMTP -notcontains $Addr) {
    $cSMTP += $Addr.tostring() + “, ” #Add address to collection
    }
    $ActDet = $Active | ?{$_.email -match $($Addr)} #Check to see if address is active
    If ($ActDet) {
    $ActiveE = “Active”
    $ActDet | % {
    $Cnt += $_.Rcvd #Set/increment count of address activity
    $Mo += $_.Seen #Set/increment count of months seen
    }
    } ElseIf ($ActiveE -eq “Active”) {
    $ActiveE = “Active”
    } Else {
    $ActiveE = “Not Active”
    }
    }
    }
    $cSMTP = $cSMTP.substring(0,($cSMTP.length-2)) #Remove trailing comma
    $cX400 = $cX400.substring(0,($cX400.length-2)) #Remove trailing comma
    }

    #Gather folder statistics
    $Name = $null #PFS Name
    $PFID = $null #Path of PF
    $ID = $null #Looong number ID
    $Items = 0 #ItemCount
    $Size = 0 #TotalItemSize
    $AssocItemCt = 0 #Attachments
    $AssocItemSize = 0 #Attachments
    $UMod = $null #LastUserModificationTime
    $Owners = 0 #Number of owners
    $Folder = Get-PublicFolderStatistics -Identity $MPFID -Server $Srv -ResultSize $ResultSize -EA 0 | select Name, FolderPath, CreationTime, Identity, ItemCount, LastUserModificationTime, OwnerCount, TotalItemSize, AssociatedItemCount, TotalAssociatedItemSize
    If ($Folder) {
    $Name = $Folder.Name
    $Path = $Folder.FolderPath
    $PFID = “\” + $Path
    $Items = $Folder.ItemCount
    $Size = $Folder.TotalItemSize
    $CDate = $Folder.CreationTime.ToShortDateString() #Creation Date
    $UMod = If ($Folder.LastUserModificationTime) {$Folder.LastUserModificationTime.ToShortDateString()} #Last user modification date–probably folder properties
    $ID = $Folder.Identity
    $Owners = $Folder.OwnerCount
    $AssocItemCt = $Folder.AssociatedItemCount #Attachments?
    $AssocItemSize = $Folder.TotalAssociatedItemSize.value.toKB() #Attachment size?
    }

    #Gather folder attributes
    $ME = $null #PF MailEnabled attribute
    $Sub = $null #PF SubFolders attribute
    $Rules = $null #PF Rules attribute
    $PFEntryID = $null #PF EntryID attribute
    If ($PFID) {$ThisPF = $PF | ?{$_.Identity -like $PFID}}
    If ($ThisPF) {
    $PFID = $ThisPF.Identity
    $ME = $ThisPF.MailEnabled
    $PFEntryID = $ThisPF.EntryID
    $Sub = $ThisPF.HasSubFolders
    $Rules = $ThisPF.HasRules
    }

    #Gather Item statistics
    $Contents = $null #Dates of folder content
    $Oldest = $null #Date of oldest content
    $Newest = $null #Date of newest content
    If ($MPFID) {
    $Contents = Get-PublicFolderItemStatistics $MPFID -Server $Svr | Select CreationTime | Sort CreationTime
    If ($Contents) {
    If ($Items -eq “1”) {
    $Oldest = $Contents.CreationTime | Get-Date -Format MM/dd/yyyy
    $Newest = $Contents.CreationTime | Get-Date -Format MM/dd/yyyy
    } Else {
    $Oldest = $Contents[0].CreationTime | Get-Date -Format MM/dd/yyyy
    $Newest = $Contents[$Items - 1].CreationTime | Get-Date -Format MM/dd/yyyy
    }
    } Elseif ($Sub -eq $true) {
    $Oldest = “Subfolders”
    $Newest = “Subfolders”
    } Else {
    $Oldest = “No Content”
    $Newest = “No Content”
    }
    }

    #Get folder permissions
    $Contrib = $null
    $Owner = $null
    $PEdit = $null
    $FolderPermissions = @{}
    $FolderPermissions = get-PublicFolderClientPermission -identity $PFID -Server $Server
    If ($FolderPermissions) {
    $FolderPermissions | % {
    $PCnt = $null
    $Role = $null
    $IsRole = $null
    $Perm = $null
    $Change = $null
    $ThisPerm = $_
    $User = $($ThisPerm.user)
    $Role = $($ThisPerm.accessrights)
    $Permission = $Role | select -ExpandProperty Permission
    $IsRole = $($Role.IsRole) #| select IsRole
    $PCnt = $($Permission.count)
    If ($IsRole -eq $true) {$Perm = $Role } Else {$Perm = $Permission}
    If ($PCnt -match “9”) {$Perm = “Owner -FC”}

    #List Contributors
    If ($User -match “Anonymous” -and $Role -match “Contributor”) { #Don’t care about Anonymous
    } ElseIf ($User -match “Default” -and $Role -match “Contributor”) {
    $Contrib += “Default; ” #Add address to collection
    } ElseIf($User.ActiveDirectoryIdentity.name -and $Role -match “Contributor”) {
    $Contrib += $User.ActiveDirectoryIdentity.name.tostring() + “; ” #Add address to collection
    }

    #List folder Owners & Publishing Editors
    If ($User -match “svc_exch” -or $User -match “email group” -or $User -match “Smith, John” -or $User -match “Doe, Jane”) { #Skip intended owners
    } ElseIf ($User -match “Anonymous” -and $Role -match “Owner”) {
    $Owner += “Anonymous; ” #Add address to collection
    } ElseIf ($User -match “Default” -and $Role -match “Owner”) {
    $Owner += “Default; ” #Add address to collection
    } ElseIf($User.ActiveDirectoryIdentity.name -and $Role -match “Owner”) {
    $Owner += $User.ActiveDirectoryIdentity.name.tostring() + “; ” #Add address to collection
    } ElseIf ($User -match “Anonymous” -and $Role -match “PublishingEditor”) {
    $PEdit += “Anonymous; ” #Add address to collection
    } ElseIf ($User -match “Default” -and $Role -match “PublishingEditor”) {
    $PEdit += “Default; ” #Add address to collection
    } ElseIf($User.ActiveDirectoryIdentity.name -and $Role -match “PublishingEditor”) {
    $PEdit += $User.ActiveDirectoryIdentity.name.tostring() + “; ” #Add address to collection
    }
    }
    If ($Contrib) {$Contrib = $Contrib.substring(0,($Contrib.length-2))} #Remove trailing semi-colon
    If ($Owner) {$Owner = $Owner.substring(0,($Owner.length-2))} #Remove trailing semi-colon
    If ($PEdit) {$PEdit = $PEdit.substring(0,($PEdit.length-2))} #Remove trailing semi-colon
    }

    #Update hash table
    If ($ID) {
    $PFHT.add($ID,$MPFDN)
    }

    #Output to log file
    “$MPFDN`t$PFID`t$Items`t$Size`t$AssocItemCt`t$AssocItemSize`t$Oldest`t$Newest`t$CDate`t$Rules`t$cSMTP`t$ActiveE`t$Cnt`t$Mo`t$Owner`t$PEdit`t$Contrib`t$ME`t$MESO`t$LEDN`t$cX400`t$Owners`t$ID” >> $Log
    }

    $MF = Get-Date -Format g
    “Mail folders finished: $MF” >> $Log

    #Gather informstion on non-mail folders
    #Gather folder statistics
    #Test Folder
    #$Test = “000000001A447390AA6611CD9BC800AA002FC45A03001018169845DBD31198040090273D143E00000067B65A0000″
    #$Folders = Get-PublicFolderStatistics $Test -Server $Srv -ResultSize $ResultSize -EA 0 | select Name, FolderPath, CreationTime, Identity, ItemCount, LastUserModificationTime, OwnerCount, TotalItemSize, AssociatedItemCount, TotalAssociatedItemSize

    #All Folders
    $Folders = Get-PublicFolderStatistics -Server $Srv -ResultSize $ResultSize -EA 0 | select Name, FolderPath, CreationTime, Identity, ItemCount, LastUserModificationTime, OwnerCount, TotalItemSize, AssociatedItemCount, TotalAssociatedItemSize
    $PFCnt = $Folders.count #Total number of folders
    “Number of Folders: $PFCnt”
    $Prog = 0 #Progress indicator

    #Clear Mail Attributes
    $MESO = $null #Name attribute of MPF
    $LEDN = $null #LegacyExchangeDN
    $cSMTP = $null #Collection SMTP
    $cX400 = $null #Collection X400
    $Cnt = $null #Number of times active PF address was seen (top month)
    $Mo = $null #Number of months active PF address was seen
    $ActiveE = “Not Mail-enabled” #Status flag

    $Folders | % {
    $CurrPF = $_
    $Items = 0 #ItemCount
    $Size = 0 #TotalItemSize
    $AssocItemCt = 0 #
    $AssocItemSize = 0 #
    $UMod = $null #LastUserModificationTime
    $Owners = 0
    $Name = $CurrPF.Name
    $Path = $CurrPF.FolderPath
    $PFID = “\” + $Path
    $Items = $CurrPF.ItemCount
    $Size = $CurrPF.TotalItemSize
    $CDate = $CurrPF.CreationTime.ToShortDateString() #Creation Date
    $UMod = If ($CurrPF.LastUserModificationTime) {$CurrPF.LastUserModificationTime.ToShortDateString()} #Last user modification date–probably folder properties
    $ID = $CurrPF.Identity
    $Owners = $CurrPF.OwnerCount
    $AssocItemCt = $CurrPF.AssociatedItemCount #Attachments?
    $AssocItemSize = $CurrPF.TotalAssociatedItemSize.value.toKB() #Attachment size?
    $Prog = $Prog + 1

    #Check Hash Table
    If (!($PFHT.ContainsKey($ID))) {

    #Output to screen
    “Folder $Prog of $PFCnt : $Name : $Path”

    #Gather folder attributes
    $ME = $null #PF MailEnabled attribute
    $Sub = $null #PF SubFolders attribute
    $Rules = $null #PF Rules attribute
    $PFEntryID = $null #PF EntryID attribute
    If ($PFID) {$ThisPF = $PF | ?{$_.Identity -like $PFID}}
    If ($ThisPF) {
    $PFID = $ThisPF.Identity
    $ME = $ThisPF.MailEnabled
    $PFEntryID = $ThisPF.EntryID
    $Sub = $ThisPF.HasSubFolders
    $Rules = $ThisPF.HasRules
    }

    #Gather Item statistics
    $Contents = $null #Dates of folder content
    $Oldest = $null #Date of oldest content
    $Newest = $null #Date of newest content
    $Contents = Get-PublicFolderItemStatistics -Identity $PFID -Server $Svr | Select CreationTime | Sort CreationTime
    If ($Contents) {
    If ($Items -eq “1”) {
    $Oldest = $Contents.CreationTime | Get-Date -Format MM/dd/yyyy
    $Newest = $Contents.CreationTime | Get-Date -Format MM/dd/yyyy
    } Else {
    $Oldest = $Contents[0].CreationTime | Get-Date -Format MM/dd/yyyy
    $Newest = $Contents[$Items - 1].CreationTime | Get-Date -Format MM/dd/yyyy
    }
    } Elseif ($Sub -eq $true) {
    $Oldest = “Subfolders”
    $Newest = “Subfolders”
    } Else {
    $Oldest = “No Content”
    $Newest = “No Content”
    }

    #Get folder permissions
    $Users = @{}
    $Contrib = $null
    $Owner = $null
    $PEdit = $null
    $FolderPermissions = @{}
    $FolderPermissions = get-PublicFolderClientPermission -identity $PFID -Server $Server
    If ($FolderPermissions) {
    $FolderPermissions | % {
    $PCnt = $null
    $Role = $null
    $IsRole = $null
    $Perm = $null
    $Change = $null
    $ThisPerm = $_
    $User = $($ThisPerm.user)
    $Role = $($ThisPerm.accessrights)
    $Permission = $Role | select -ExpandProperty Permission
    $IsRole = $($Role.IsRole) #| select IsRole
    $PCnt = $($Permission.count)
    If ($IsRole -eq $true) {$Perm = $Role } Else {$Perm = $Permission}
    If ($PCnt -match “9”) {$Perm = “Owner -FC”}

    #List Contributors
    If ($User -match “Anonymous” -and $Role -match “Contributor”) { #Don’t care about Anonymous
    } ElseIf ($User -match “Default” -and $Role -match “Contributor”) {
    $Contrib += “Default; ” #Add address to collection
    } ElseIf($User.ActiveDirectoryIdentity.name -and $Role -match “Contributor”) {
    $Contrib += $User.ActiveDirectoryIdentity.name.tostring() + “; ” #Add address to collection
    }
    #List folder Owners & Publishing Editors
    If ($User -match “svc_exch” -or $User -match “email group” -or $User -match “Smith, John” -or $User -match “Doe, Jane”) { #Skip intended owners
    } ElseIf ($User -match “Anonymous” -and $Role -match “Owner”) {
    $Owner += “Anonymous; ” #Add address to collection
    } ElseIf ($User -match “Default” -and $Role -match “Owner”) {
    $Owner += “Default; ” #Add address to collection
    } ElseIf($User.ActiveDirectoryIdentity.name -and $Role -match “Owner”) {
    $Owner += $User.ActiveDirectoryIdentity.name.tostring() + “; ” #Add address to collection
    } ElseIf ($User -match “Anonymous” -and $Role -match “PublishingEditor”) {
    $PEdit += “Anonymous; ” #Add address to collection
    } ElseIf ($User -match “Default” -and $Role -match “PublishingEditor”) {
    $PEdit += “Default; ” #Add address to collection
    } ElseIf($User.ActiveDirectoryIdentity.name -and $Role -match “PublishingEditor”) {
    $PEdit += $User.ActiveDirectoryIdentity.name.tostring() + “; ” #Add address to collection
    }
    }
    If ($Contrib) {$Contrib = $Contrib.substring(0,($Contrib.length-2))} #Remove trailing semi-colon
    If ($Owner) {$Owner = $Owner.substring(0,($Owner.length-2))} #Remove trailing semi-colon
    If ($PEdit) {$PEdit = $PEdit.substring(0,($PEdit.length-2))} #Remove trailing semi-colon
    }

    #Output to log file
    “$Name`t$PFID`t$Items`t$Size`t$AssocItemCt`t$AssocItemSize`t$Oldest`t$Newest`t$CDate`t$Rules`t$cSMTP`t$ActiveE`t$Cnt`t$Mo`t$Owner`t$PEdit`t$Contrib`t$ME`t$MESO`t$LEDN`t$X400`t$Owners`t$ID” >> $Log
    }
    }
    Get-Date -Format g >> $Log

  10. ixobelle says:

    awesome, thanks for this writeup

  11. Jeff Dubrow says:

    Hey Tony,

    Have you seen any cases where a public folder is not mail enabled but is in fact mail enabled in the background? I’m just wondering if it is something cooky in my environment or if it is really a known issue. I have a ton of folders that are not mail enabled but if you look in adsiedit they have mail enabled properties. In the EMC, they do not show any mail enabled properties. If in some cases I go ahead and mail enable them to get the mail properties and then mail disable them, they are still mail enabled. Seems like the only way to really get them to mail disable is to remove the mail properties through adsiedit. I’m also thinking that alot of these public folders existed back in the Exch 5.5 days. We recently transitioned to Exch2010, but the issue was there before 2010 and I haven’t removed all of the exch2007 public folder replicas yet.

    • I haven’t seen this problem before so it might be worth your while reporting the issue to Microsoft to ask them to investigate, just in case something kooky is going on. Is it possible that you ever had an add-on or some other code that might have mail-enabled all teh folders, especially well back in the dim and distant past?

      TR

  12. Mike Fox says:

    We have this issue as well in our PF structure of ~25K folders, many of which came from Exchange 5.5. Though we haven’t opened a case with Microsoft, we have researched it with our Microsoft rep to no avail. The easiest way to mail-disable them is to delete their Microsoft Exchange System Object (MESO) in AD Users & Computers. One fo the outputs of the script I submitted earlier is the MailEnabled attribute of Get-PublicFolder. Most of our mail-enabled folders are flagged as not mail-enabled, though in fact they have mail attributes and receive mail. We are migrating our Public Folder content to SharePoint. Once a part of the structure is migrated, we don’t want mail going to the folders. Since they think they’re not mail enabled, Disable-MailPublicFolder doesn’t work. The script I’m pasting below requires Quest’s free ActiveRoles plugin for Powershell. I have it as a portion of a longer script that takes as input a portion of the output of the aforementions script for gathering PF statistics, but I don’t have time to clean it up. This scriptlet will delete the MESO. You would have to supply the MESO & LEDN.
    #Script to mail-disable public folders which think they are already mail disabled

    #Enter folder attributes
    $MESO = “EDI-Requests”
    $LEDN = “/o=aafes/ou=AAFESNA/cn=Recipients/cn=EDI-REQUESTS9816181098161810981618103E143D2725E2A0″

    $Obj = [ADSI] (“LDAP://CN=$MESO,CN=Microsoft Exchange System Objects,DC=aafes,DC=com”)
    $ObjDgN = $Obj.distinguishedName
    $ObjLEDN = $Obj.legacyExchangeDN

    If ($LEDN -eq $ObjLEDN) {
    $ObjDgN | Remove-QADObject -Confirm:$false -Force #-WhatIf
    “Disabled”
    } Else {
    “Disabled LEDNs don’t match – Mail Disable Problem”
    }

  13. Scott says:

    Get-PublicFolder –Identity ‘\’ -Server ExServer1 -Recurse
    -ResultSize Unlimited | Get-PublicFolderStatistics | Select Name, ItemCount, TotalItemSize, LastModificationTime| Sort-Object LastModificationTime
    –Descending | Format-Table –AutoSize> C:\Temp\PFReport.txt

    ——-

    What if I want to output properties from both Get-PublicFolder *and* Get-PublicFolderStatistics?

    I am trying to generate a CSV that contains all public folders with the following properties:

    From Get-PublicFolders:
    * Name
    * ParentPath
    * Identity
    * HasSubFolders
    * MailEnabled
    * HiddenFromAddressListsEnabled
    * HasRules

    From Get-PublicFolderStatistics:
    * ItemCount
    * TotalItemSize
    * LastAccessTime
    * LastModificationTime

    I’m having a lot of trouble with this. I have no problem generating a CSV with the fields from one or the other command, but I can’t seem to get a CSV that has all the fields.

    • I think you’ll have to put the fields that you want for each folder (from the Get-PublicFolder call) into variables and then output them alongside the fields from the Get-PublicFolderStatistics call in formatted lines. There’s bound to be some good examples of how to do this on the net… I just don’t have time to search right now.

      TR

  14. Mike Fox says:

    Scott,
    I posted a script on this blog on Aug 17 that captures most of data you are looking for (plus some) and outputs it to a text file (tab delimited). With a little tweaking you could add the fields you are looking for which aren’t already specified. It coalates Get-PublicFolder, Get-MailPublicFolder, Get-PublicFolderStatistics, Get-PublicFolderItemStatistics, and Get-PublicFolderClientPermission. If you’re going to be doing any editing, check out the PowerGUI script editor at powergui.org. Note that I believe LastAccessTime & LastModificationTime are of little value as there are system processes (backups?) that touch those properties. The script gathers the dates of the oldest and newest items in the folder. The only gotcha is when the folder is being actively worked and there is no content for that reason, not because it is unused. May have to look at those other properties again…

  15. Tara says:

    We have several mail-enabled public folders in a mixed 2003 and 2010 environment. There are no replicas on 2003. We are removing 1 replica (server01) in 2010 (leaving 2 others), but when we do the mail enabled public folders stop receiving mail from internal only. External emails can still be delivered to the folders without issue. If we put the replica back on server01, all of the emails get delivered. It’s almost like there’s something with the mail enabled piece that doesn’t get replicated to server02 and server03. These folders had spaces in the aliases originally, but that has since been removed. Any ideas what the problem could be? Would it have anything to do with the routing group connector?

  16. Dave Gel says:

    Great Post Thanks!

    I am experiencing something similar to the above. I currently have three servers in my test environment. Serv1 (mailboxes) , Serv2 (PF DB), and Serv3 (PF DB). Serv3 was added to have content from Serv2 replicated to it. According to TechNet:
    http://technet.microsoft.com/en-us/library/bb232041(EXCHG.80).aspx
    This makes the msExchOwningPFTreeBL = Serv3.

    When I send mail to a mail enabled PF, the mail goes to Serv3 first then shows up in Serv2 according to my replication schedule. Each of the PF databases refer to each other. Yea cockroaches!!
    When I turn off serv3 and try to send a mail to the PF, it hangs in the Serv1 Queue attempting to go to Serv3 (in the next hop domain). Eventually get a 432 4.3.2 mailbox server offlien message. (all servers 2007 sp3). Bad cockroaches…

    Why would it not attempt to send to the PF db on Serv2?

    I turn Serv3 back on and the mail gets routed….

    Any words of wisdom?

    • No words of wisdom. Frustration perhaps.

      I think the issue is that you’ve made Serv3 the preferred destination for PF email. Like a user mailbox, you can only have one destination. When Serv3 is down, Exchange queues messages for it just like it would for a mailbox. And eventually those messages expire and you get a NDR. I don’t believe that there is the facility for automatic re-routing to another replica server. But then again, these are weird and wonderful items and someone else might have a different opinion…

      TR

  17. Erik H says:

    Hi Tony

    Thanks for your article on Public Folders…they are a frustrating beast and I’m starting to hope that Microsoft forces the issue and just gets rid of them altogether. But I digress :)

    I was wondering if you had any thoughts on the following scenario. We migrated from Exchange 2007 to 2010. The Exchange 2007 public folder database is still there as it is the only other replica that exists and I have been a bit hesitant to get rid of it until I know there are more replicas in place. I started doing this very thing last week and have been perplexed by the results.

    When I did the initial migration I used the “AddReplicaToPFRecursive.ps1″ script to add replicas on the new Exchange 2010 server. Immediately upon adding the replicas, the data began replicating from Exchange 2007 to Exchange 2010. This included all data (new items and existing ones). I am now adding a second Exchange 2010 PF Database and have added it to the Public Folder Replicas in exactly the same way. However, instead of seeing the data begin replicating immediately, I am finding that only new items replicate to the new database. If I open the Public Folder Management Console and do an “Update Content” on a specific folder, all the existing items replicate successfully.

    So…I have two questions about this:

    1. Do you have any idea why this is the behavior and is it intended?
    2. I have about 10,000 public folders and cannot do a manual “Update Content” for all of them. I imagine I can script it and have the script do a recursive “Update Content” on all the public folders, but is that necessary and is that how you would recommend doing it?

    Any help would be greatly appreciated.

    • So what you’re saying is that backfill for the new replicas isn’t working but new items are replicated successfully? If so, that doesn’t sound at all right as I’d expect backfill to occur to bring the new replicas up to date. It would be easy enough to run a one-time PowerShell command (at the weekend so as not to flood the network) and that’s probably what I would do, but maybe first turn up PF logging to see if anything is captured that might indicate where the error lies…

      TR

      • Erik H says:

        Thank you so much for the quick reply. Yes, it looks like the backfill is not properly replicating unless I force an update on the Public Folder. I have increased all of the Public Folder Replication logging to Expert, but don’t really see any errors that lead me to any real conclusion about why this might be happening. I think I’ll just have to run a PowerShell command to update all the public folders. I’d rather not have to do it this way, but I don’t think I have a choice.

  18. jojoba says:

    Okay, I don’t really have ANY mail-enabled, but when I run the ‘get-mailenabled’ thing you mentioned, it says a number of my folders are corrupted. All replication from 2007 to 2010 seems to have come across cleanly – i did “get stats” and made sure all item counts were good, AFTER i did the “AddReplicaToPFRecursive.ps1″ that you folks were discussing.
    1) I did NOT do the “move … .ps1″ script – instead, I chose to “replicate” all folders, including OAB and system folders – we don’t really have that many.
    2) As I said, I saw it replicate and I then REMOVED the 2007 servers from replication
    So – some questions:
    1) Was it okay to “replicate” vs. “move???” – some recent-yet-older docs said “dont’ [move], just do ‘replicate.’ ” but then nobody ever gave the definitive answer “how to know when you’re DONE and how to PROPERLY REMOVE/decommission the old 2007 server(s)”
    2) No matter what method is used, it seems whatever ADSI attribute related to a so-called “site server link” still remains pointed to the old PF area. Does this sound normal? I know it needs to be changed and there are some related articles on that topic.
    3) I have let’s say, New2010-A & New2010-B servers (Exch 2010 R2 SP1)
    I inadvertently moved the “Origination” point of the OAB to server “B” – but have NOT yet creatd any PF DB on that server. Without thinking, I had the 2007 stuff replicate only to server “A”. so, in looking at the “Move” option under “Change Generation Server” for the OAB, it says, “Will move OAB to the target sever and ALSO move data”
    OOPS! My Data is on Server A! If I go ahead & create a PF DB on Server B, then HOW do i accomplish replication WITHOUT wiping out my OAB info on Server A?
    Thanks in advance! (wonderful article, btw!)

    • jojoba says:

      I think it should be “Genration” point, not “Origination” point – right?
      Anyway, I think that I should have my “Generation server” be the same server on which the PF DB resides, right? That makes sense to me anyway. And then, I should create PF DB on the 2nd Exch 2010 server, and then set up replication. BUT again, I DON’T want to overwrite my existing OAB that I replicated already – so any tips/hints would be greatly appreciated. Thanks.

  19. DaGeeza says:

    Hi Tony and thanks for another useful article. I would like to ask what happens in the case where you have an Outlook 2007 client whose Public Folder Database is on Exchange 2010, but whose target PF replica is housed on one of any Exchange 2003 servers located in various Routing Groups/Administrative Groups. Can you advise both how the referral process works in this case and also how it is possible to control the preferred targets using PF Referrals (Affinity) ?

    Thanks

    DaGeeza

    • I don’t have an Exchange 2003 server to try this out against, but I assume that referral will work in the same way as with other versions. In other words, the client will receive a referral from the Exchange 2010 server to the lowest cost Exchange 2003 PF server that contains the replica.

      Sorry, but that’s about all I know. I’d have to check things out against a server and I don’t have any to check against…

      TR

  20. Clifford Richmond says:

    I have a silly question. How/or does one extract actual item level details from a Public Folder. Specifically, If Get-PublicFolderStatistics shows that I have 1067 items in a Public Folder sub-folder, that I know is a public calendar folder (not mail enabled); how do I get to calendar details for this folder like subject, start time, end time or duration, etc.

    Cliff

      • Clifford Richmond says:

        Before you read further, let me tell you that I am very grateful for this information.

        Is there a way to do this via the management shell/powershell (preferably without using EWS). I am not the Exchange administrator, but (at the moment) have remote desktop access and may be granted longer-term remote powershell capabilities on the server.

        What I am trying to do, specifically, is create a long-term periodic batch job for extracting public folder calendar information in order to populate a publically viewable web calendar in order to book these resources (the calendars are for reservable meeting rooms). So, I have been told to assume that the end-user will very likely not have access to Sharepoint or Outlook. Google calendar will not work for this calendar sync problem because it will only automatically sync my personal default calendar.

        I am not sure how hip the Exchange administrator will be to providing ExFolders on the server. If he is willing, and based on these further details of my task at hand; do you still think that this is something ExFolders would allow me to do and to automate with task scheduler?

        Last TidBit of Info
        When I do a: Get-PublicFoldersItemStatistics for one of the calendar folders, I can see some meaningful output like subeject and identity. Will these very long ID(entity) numbers lead me to the other items of interest (start times, dates, duration, etc.)?

        Thank you for your patience.

      • I honestly don’t think you are going to get the information you need through PowerShell. It was designed as a management interface and not as a client interface. EWS is what you need to use. Head over to Glen Scales’s site http://www.gsexdev.blogspot.com/ and pose your questions there. Glen is a great guy and a wonderful EWS coder. I bet he can help you.

        TR

  21. Clifford Richmond says:

    I’ll head that way. I appreciate the guidance. I was going nowhere quick, but now I have a plan. Thanks, Tony.

  22. Carol Ostos says:

    Thanks for this article! Good stuff. I got a question hope you can help me out.
    I’m currently running Exchange 2003 SP2 and will be migrating to Exchange 2010 SP1, we will a 2 node DAG and since DAG node members cant host public folder databases I have decided not to support public folders but instead use Sharepoint for any document sharing, collaboration, etc.
    Other offices (located in other regions America, Europe) do support Public Folders and my users were wondering if they could still have access to the public folders in other regions. From what I read, I should be able to specify a default public folder database on each database meaning I could point this to a public folder store in US or Europe and my users could have access to PFs using Outlook 2007 client, but how about Outlook Web App. When testing this in the lab I get the following error “The public folder you’re trying to access could not be found because there is no Exchange 2010 public folder server”. Does this mean, they would be able to connect to PF using Outlook but not Outlook Web App because the database is not located on a Exchange 2010 Mailbox Server?

    • DAG node members can host public folder databases. However, the public folder databases use their own replication mechanism that is different to the log shipping mechanism used to update databases within the DAG.

      The guiding principle of PFs since their inception has been to keep data close to users. With this in mind, I think I would have a PF database on a DAG member and direct clients whose mailboxes are on Exchange 2010 to that PF database.

      TR

      • Carol Ostos says:

        Thanks for your reply Tony! When creating databases on my MBX Servers, noticed they picked up an available replica in a different active directory site, just as you mentioned on this article. I understand it would be better to point this to a local copy but
        users are able to access public folder with no issues, at least when using Outlook as client. OWA still complaints about not having an Exchange 2010 PF database; which brings me to a problem that might not be the scope of this article but somehow has relation to Public Folders, Offline Address Book. When trying to download the OAB from Outlook 2007 client users get Error 0x8004010F. Google search suggests we need to replicate public folder content from Exchange 2003 to Exchange 2010 but how about if we no longer support PF in our domain but instead piggyback from the US replica. The default offline address list at the organization level is set to distribution mechanism: public folders and the OAB distribution in our CAS Servers points to http://casserverfqdn/OAB for internalURL

        Note: I have not set the Offline Address Book under Client Settings on any of my databases, I was not sure if this was the only thing missing.

        Am i missing something here?

        Thanks!!!

      • Have you looked at http://blogs.technet.com/b/exchange/archive/2007/04/19/3401966.aspx to see the common causes for the error condition that you’ve encountered when downloading the OAB with Outlook 2007 to determine whether any of these states pertain to your deployment? Or even better, the advice given by Dave Goldman at http://blogs.msdn.com/b/dgoldman/archive/2008/10/01/understanding-why-error-code-0x8004010f-is-thrown-when-trying-to-download-an-oab.aspx (Dave is the guru when it comes to all things to do with the OAB).

        TR

  23. Steven says:

    Is there any way to make public folders mail enabled by default on creation in outlook 2010? We create new public folders for each project and it would be nice to not have to do this form EMC. Exchange 2010, Outlook 2010

    • I don’t think so… But then again, I have not tried.

      Do you have many new public folders being created? I suspect not, in which case it might be sufficient to run a batch job nightly to look for public folders that are not mail enabled and then do the necessary…

      TR

      • Steven says:

        Yes, new folders are created on a daily basis. For example, our marketing dept. handles creation of new proposals and sets up a public folder as placeholder for all emails. By default, that PF is not mail enabled, so the PM of the new proposal immediately contacts our department claiming the folder isnt working, we go into EMC and mail enable it. Of course they can drag and drop at this point into the PF, but not as clean and easy as cc: to the PF. Thanks for you feedback.

  24. Christian Léger says:

    Hello,
    I found very interesting acticle. I try to understand how email-enable public folder works. When I send a message to the public folder, the user who is associated with the public record (A) receives the message instantly but those associated with the public record (B) receives the message with the time of replication.

  25. Greg says:

    Thanks for the above information. I have a Windows 2003 AD and Exchange 2010. I setup the public folder with email enabled.

    When sending email to the smtp it returns back: #554 5.2.0 STOREDRV.Deliver.Exception:ObjectNotFoundException; Failed to process message due to a permanent exception with message The Active Directory user wasn’t found. ObjectNotFoundException: The Active Directory user wasn’t found. ##

    My question is how do I create the AD user and link it to this public folder? Thanks for any help.

  26. Christian Leger says:

    Hello,

    On section, mail-enable public folder I have a question. I have two database with replication and If I understand he has a database that priority over the other, and if the prioity database is offline no email is delivered. why?
    Thank

  27. In your case I would create a content type around that document template and bind my event receiver to that content type. Walkthrough 3 describes how to develop an event receiver for a list content type. You can easily do the same for a document library content type.

  28. Canada Guy says:

    Great article! I would like to move from EX07 to EX2010 and am in a large environment. I would like to move the PFs over one at a time as not to break important workflows and daily process. How can I accomplish this task?

  29. Brenda Pauwels says:

    Tony, can explain how a transport server decides to which replica it will deliver inbound Internet messages? We have an enviroment with two PF databases with replicas of all folders on both servers that are in the same AD site. When one of these servers is unavailable (i.e. HT cannot connect to it), messages queue up on the HT. It seems to me that when one PF server is unavailable a HT should try delivering to the other PF server, but it doesn’t. If the PF server is going to be down for awhile, what can be done to force delivery to the other PF server?

  30. Dave says:

    Great article, packed full of useful information. I ran across the article searching for an answer to another question which you may be able to answer here. I have user that was an owner to 5 or 6 public folders that were migrated from Exchange 2003 to 2010 (along with all of the other public folders) He cannot access these 5 or 6 even though he still shows as an owner of the folders after migration. I also noticed those same folders are greyed out when I’m looking at the entire list under default public folders in the EMC. I’m assuming that may be because they are not mail-enabled but haven’t tested that yet. Last thing that seemed odd on these public folders is that they were not replicated to the other Exchange server upon migration when all the other public folders were. It may have been that way on the Exchange 03 server but I didn’t notice, they were created before my time with this company.

    If you have any clues why the owner of the public folders can’t access them while others can let me know.

    Thanks in advance,

    Dave

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s