Whenever someone shows me a Calendar folder where OWA and Outlook have different ideas of when recurring meetings are, I always ask if they've tried to poof the calendar. This always generates a chuckle, even though I was dead serious.
OWA doesn't know anything about expanding recurring meetings and appointments. Instead, it relies on a task which runs in Exchange that expands the recurring items for it. Under certain scenarios, Exchange may not realize that a recurring item has changed and needs expansion again. Sometimes this is because of a bug, sometimes it's because of corrupted data. Sometimes a little of both.
Anyway, the process for fixing this is called Poof. I think the name stems from the expression "Poof! Be gone!". When a Poof is performed on a calendar, Exchange deletes all of the cached expansions and performs them again.
Poof is enabled by first setting the following registry value on the Exchange server
Value (DWORD): CalendarRecovery
Next, in the description field of the properties of the Calendar folder, set the following text:
This signals Exchange to perform the Poof for this Calendar.
I haven't posted a MAPI sample in a while, so I whipped one together to demonstrate how one could Poof a set of Calendars:
As usual, all caveats and disclaimers for samples apply. One big caveat here - Poof is an expensive process. Running Poof against every mailbox in a server in a short period of time could place a heavy load on the server. So - if this is something you want to do, I'd recommend doing the Poof in batches, like so (assume legdns.txt contains a list of legacy DNs for mailboxes you wish to Poof):
for /F "delims=" %i in (legdns.txt) do @PowerPoof -p "Default Outlook Profile" -m "%i" -v
Note also that if you put this in a batch file, you'd need to use %%i instead of %i.
One of my colleagues pointed out why Poof sometimes won't work - if you're using a cached mode profile, when you write the text to the Calendar folder, nothing is changed on the server until the client syncs with the server. And even then it's unclear whether that would actually trigger the Poof. So - if you are performing Poof manually, make sure the Outlook profile you use isn't cached.
If you're using PowerPoof with the -m or -s switches, the connection made to the mailbox is uncached regardless of the profile type, so this won't be an issue. If you're using PowerPoof with -p and no other parameters, then it will make the setting on the calendar folder of whatever profile you specified, so if that profile is cached it's likely the Poof won't happen.
Also - another issue I've seen frequently with PowerPoof. If you run it with the legdns.txt file, make sure the DNs listed in legdns.txt do not have extra spaces at the beginning or ending of the line. If they do, those spaces will passed in with the -m switch and PowerPoof won't be able to find the mailbox.
How do you know when a mailbox calendar is done "poofing"? Is there a event written in the Application log? Or if it's not gone from the Outlook description then it isn't working?
Poof! It works like a dream... Thanks for great tool!
If recurring meetings are not showing in OWA but are showing in Outlook mapi client will running Poof against the calender correct that issue
How does one correct the 0x8004010F error cannot locate calendar? I have tried two accounts to run Powerpoof, both are domain admins.
Todd L - try running Outlook as your admin account and see if you can log on to the mailbox. You probably don't have permissions to the mailbox.
I created a new user (Powerpoof) gave it full rights to the Exchange server. Created a new Outlook profile for Powerpoof and started Outlook. Added the mailbox for Abington and opened his calendar. Then went to dos and ran
C:\poof\PowerPoof\Release>powerpoof -p "Outlook" -s ghsmsex5 -m "/o=ghs/ou=first
administrative group/recipients/cn=todd.abington" -v
INFO: OpenOtherUsersMailbox called with lpMAPISession = 0x00B61F90, lpMDB = 0x00
E22180, Server = "ghsmsex5", Mailbox = "/o=ghs/ou=first administrative group/rec
INFO: Calling HrMailboxLogon with Server DN = "/cn=Configuration/cn=Servers/cn=g
hsmsex5/cn=Microsoft Private MDB"
INFO: HrMailboxLogon: Creating EntryID. StoreDN = "/cn=Configuration/cn=Servers/
cn=ghsmsex5/cn=Microsoft Private MDB", MailboxDN = "/o=ghs/ou=first administrati
ERROR: , Code: 0x8004011D, Function lpMAPISession->OpenMsgStore( NULL, sbEID.cb,
(LPENTRYID) sbEID.lpb, NULL, MDB_NO_DIALOG | MDB_NO_MAIL | MDB_TEMPORARY | MAPI
_BEST_ACCESS, &lpMailboxMDB), File .\MAPIStoreFunctions.cpp, Line 335
ERROR: , Code: 0x8004011D, Function HrMailboxLogon( lpMAPISession, lpMDB, szServ
erDN, szMailboxDN, bUseAdminPriv, lppOtherUserMDB), File .\MAPIStoreFunctions.cp
p, Line 378
If it's just the one user you need to Poof, then do the Poof manually - set the comment on the calendar using the steps I gave.
Thanks for your help. I have 88 users to do. I discovered my typing error, left off the cn infront of recipients. Poof now works!
Ah - I see it now. Good catch!
Are these files hosted anywhere currently? The link in teh article is not functional. Thanks!