Tuesday, March 22, 2011

Manage Multiple Calendar Permissions with Exchange 2010 Shell

To edit all Calendars and set Default Calendar permission to Reviewer:

$Mailboxes = Get-Mailbox -ResultSize unlimited
$Mailboxes | ForEach {Set-MailboxFolderPermission $_":\Calendar" -User Default -AccessRights Reviewer}

Note:
  • Use different Set-MailboxFolderPermission cmdlets when using Outlook in different languages (English, Dutch etc).
    Example cmdlet to use with Outlook Dutch client (calendar translates to agenda in dutch): Set-MailboxFolderPermission mailbox:\Agenda -User Default -AccessRights Reviewer
  • The Set-MailboxCalendarFolder cmdlet configures publishing or sharing settings on a calendar folder of a specified mailbox. So, this cmdlet should be used when configuring Internet Calendar sharing.

Monday, March 14, 2011

Exchange 2010 Topology discovery failed, error 0x80040a02 (DSC_E_NO_SUITABLE_CDC)

Strange issue today with an Exchange 2010 CAS/HUB/MBX Server. Event Viewer:
  • Unable to initialize the Microsoft Exchange Information Store service.   - Error 0x96f.)
  • MSExchange ADAccess 2114 Error: Process MSEXCHANGEADTOPOLOGYSERVICE.EXE (PID=1360). Topology discovery failed, error 0x80040a02 (DSC_E_NO_SUITABLE_CDC).
Solution:

Default Domain Controllers Policy:
Computer Configuration/Windows Settings/Security Settings/Local Policies/User Rights Assignment: Manage Auditing and Security Log

Manage Auditing and Security Log contained only BUILTIN\Administrators

Manage Auditing and Security Log should contain at least:
AD-NetBIOS-Name\Exchange Servers, BUILTIN\Administrators

Monday, March 7, 2011

Exchange Database Corruption

Recently a customer was facing Exchange database corruption. Event Viewer:

Event Type:      Error
Event Source:    ESE
Event Category: Database Corruption
Event ID:          447
Description:
Information Store (2864) First Storage Group: A bad page link (error -338) has been detected in a B-Tree (ObjectId: 483242, PgnoRoot: 6816401) of database...

The safest way to solve this error was to create a new DB and then perform a mailbox move to prevent the use of eseutil /p which would probably result in some data loss. Troubleshooting steps:

1. Dismount DB
2. eseutil /mh: DB in Clean Shutdown status
3. Make offline DB backup
4. Mount DB to check if DB will mount (no problem in this case).
    Otherwise I had to use eseutil /p option.
5. Dismount DB
6. eseutil /k returned: 0 Bad Pages
7. eseutil /g returned:
    Database is CORRUPTED
    Operation terminated with error -1206 (JET_errDatabaseCorrupted)
8. Create new DB and enable Circular Logging
9. Move all mailboxes to new DB and disable Circular Logging