Featured Post

Customizing the Sumatra Double Booking cmdlet

There are a simple ways to customize the Sumatra Double Booking cmdlet, and most of them involve a text editor. Let's look at the mess...

Thursday, July 30, 2009

Exchange 2007 Rollup 9 for SP1

MS released Exchange 2007 Rollup 9 for SP1 last week. The KnowledgeBase article (970162) reports twelve calendar, Outlook/OWA-related fixes:

  1. 954739 Exchange Impersonation feature does not work if a cross-forest topology has only a one-way trust relationship between forests (Ex07SP1)
  2. 961124 Some messages are stuck in the Outbox folder or the Drafts folder (Ex07SP1)
  3. 961544 Mobile users whose location is set to New Zealand cannot synchronize an exceptional occurrence after the daylight saving time (DST) update (KB 951072) is installed (Ex07SP1)CAS server
  4. 967479 Entourage clients cannot synchronize with mailboxes (Ex07Sp1/Win 08)
  5. 967525 Error 4 is returned when you synchronize a supported list of contact properties by using Exchange ActiveSync(Ex07SP1)
  6. 967676 E-mail address properties of contacts changed through Exchange Web Services (EWS) are not updated in Outlook or Outlook Web Access (OWA)(Ex07SP1)
  7. 968081 Monthly recurring meetings are declined if the "Schedule only during working hours" option is enabled(Ex07SP1)
  8. 968350 When you change the location field of a recurring calendar item to empty, the location field is set to the default value of the recurring series if this recurring item is synchronized on a Windows Mobile device (Ex07SP1)
  9. 969054 Error message after user replies to a message that has more than 300 recipients in Outlook Web Access (OWA): "Microsoft Exchange issued an unexpected response (500)" (Ex07SP1)
  10. 969324 Outlook crashes when you try to use Outlook to view e-mail messages that are arranged by subject in (Ex07SP1)
  11. 969838 An error message is returned when a user tries to change a recurring appointment in Office Outlook Web Access that was created in Outlook 2007 (Ex07SP1)
  12. 969969 OWA Error "Outlook Web Access has encountered a Web browsing error" when a user tries to delete a calendar item

Saturday, July 25, 2009

BlackBerry Permissions and Exchange Server-Side Holiday insertion

So remember a few days ago when we told you about a great simplification in setting up permissions?

Basically, and you should not be too surprised at this, the permission for BES admin are really really close to the permissions necessary for inserting holidays or running a full-state calendar migration.

Check out this post:

http://forums.crackberry.com/f50/exchange-2007-bes-install-guide-942/

which advises setting permissions as follows:



get-mailboxserver add-exchangeadministrator
BESAdmin –role ViewOnlyAdmin

get-mailboxserver add-adpermission –user
BESAdmin –accessrights ExtendedRight –extendedrights Send-As, Receive-As,
ms-Exch-Store-Admin

And then tells you to follow up with:

Open Active Directory and from the View menu select "Advanced Features". Then
go to each user that will be added to the BES and open their properties, go to
the security tab and add the user BESadmin and add the security permission "Send
As". (This will overcome some MS patches that prevent BES sending emails).
Methods are available to add BESadmin "Send As" rights to all users if required
but this method ensures only the required users have permissions added.

Make BESadmin a local Administrator of the server where you will be
installing the BES software. This is done by right mouse clicking my computer
and selecting “Manage”. From Computer Management expand “Local Users &
Groups” and select Groups. From Groups double click “Administrators” and add
BESadmin.

This is pretty much what we tell you to do in setting up a service account for running a Sumatra migration or inserting holidays, checking for broken meetings, or running the "terminated user" option in our code.

If you do not have a specific service account set up yet, this is a good place to start.

Tuesday, July 21, 2009

Server-side holiday insertion in Exchange 2007 - example

Well yes, we did go ahead and add the server-side holiday insertion into our mainstream migration code for Exchange 2007.

And we even field-tested it at a site in a mythical place called Canada.

This is a (slightly revised for purposes of pedagogy) holiday file, showing some of the flexibility of our approach. Notice you can have holidays which show as Free "F" or Busy (abbreviation is left as an exercise to the reader) so that our Canadian cousins can list USA holidays as information for everyone in their company, but make sure the time shows as Busy (i.e., do not book then) for Canadian holidays on their calendars.

In an example of instant karma, the test site told us of a wonderfully simple short cut to permissions in setting up insertion (for those of you who have not been through a migration) based on BlackBerry Enterprise Server permissions, which we'll blog on separately.

Please note that this has the following advantages:

  • It's run server-side with no user intervention
  • It is scriptable from the DOS command line
  • It's reversible, i.e., we built in UNDO capability for those occasional accidents
  • Handles multiple time zones

Any sites who have been through a migration with us are welcome to use this capability at no charge for Exchange 2007. Just drop us a line if you do not have the latest code.

Monday, July 13, 2009

GeekSpeak: Memory Leaks in System.DirectoryServices

It rained 22 days in June (in Boston). The last few days were glorious. And I missed the sun while dealing with a memory leak.

We hit this problem while translating legacy Exchange DNs into SMTP addresses in our Exchange Room analysis tool. The culprit -- System.DirectorServices (.Net 3.5)
calls to GetDirectoryEntry().Properties. With each call to System.Directoryservices, memory use jumped by 120 bytes. The annoyance became a problem after we looked up three fields - for 8,000 users.

Microsoft's MSDN Reference says: "Due to implementation restrictions, the SearchResultCollection class cannot release all of its unmanaged resources when it is garbage collected. To prevent a memory leak, you must call the Dispose method when the SearchResultCollection object is no longer needed.".

I did that. So did other folks posted similar problems in the MS forums. All were told to use dispose. It didn't work. After reading dozens of responses, someone said try the "using" contruct along with "dispose". I did. It worked.

For those of you who don't want to find the mines by stomping on the ground, here is sample code that shows System.DirectoryServices calls broken out into an excessive number of using blocks:



'return ONE value from AD given a filter
Public Function GetADField(byval strFilter as string, _
 byval strField as string) As String
 GetADField = ""
 Using dsDir As System.DirectoryServices.ActiveDirectory.Domain = _
  System.DirectoryServices.ActiveDirectory.Domain.GetCurrentDomain
    Using dsRoot As New DirectoryEntry(dsDir.Name)
      Using dsSearcher As New DirectoryServices.DirectorySearcher
        dsSearcher.SearchRoot = dsRoot
        dsSearcher.Filter = strFilter
        dsSearcher.SearchScope = SearchScope.Subtree
        dsSearcher.PropertiesToLoad.AddRange(New String() {strField})
        dsSearcher.FindAll() 'results
        Using dsResult As DirectoryServices.SearchResultCollection = _
            dsSearcher.FindAll() 'results
            Dim result As DirectoryServices.SearchResult
            For Each result In dsResult
             Using de As DirectoryEntry = result.GetDirectoryEntry()
               GetADField = de.Properties("mail").Value.ToString
               de.Dispose()
             End Using 'de
           Next 'result
           dsResult.Dispose()
           result = Nothing
        End Using 'dsResult
      dsSearcher.Dispose()
    End Using 'dsSearcher
   dsRoot.Close()
   dsRoot.Dispose()
  End Using 'dsRoot
  dsDir.Dispose()
 End Using 'dsDir
 Return GetADField
End Function



-Russ

Thursday, July 02, 2009

Bulk Move Meeting Maker to Oracle Calendar?

Keeping an eye on keyword searches that bring folks to our site usually has few surprises.

Then last month this one showed up: "bulk move meeting maker oracle calendar" (right in there with "calendar migration oracle to exchange" and "meeting maker exchange calendar convert").

Yes, Oracle does have a process to convert Meeting Maker into Oracle Calendar.

They smartly used the Meeting Maker export DAT format (just as we do - it's independent of operating system so it's the most natural format and live Meeting Maker data is a horror show of complexity).

Sidebar: Turnabout fair play with an "X" to Paul Lynde. That's the same
strategy we use to move data OUT of OCS, using the utilities Oracle provides for moving calendar data between servers.

BUT when we ran the MM to OCS conversion (a ways back when we were figuring out how to convert Oracle Calendar to Exchange), we discovered they had missed several key attributes and in general failed to impress us with their solution (we did try licensing our tech to them but they were not interested). Since their own published report example consists mainly of "Nothing to import" messages, you should be appropriately wary.

Cornell did this nice guide when they migrated out of Meeting Maker into OCS and Penn State apparently moved last year.

If you want a real geek instance of calendar comedy, check out their Troubleshooting Calendar Migration Guide for their Microsoft Exchange migration consisting largely of the equivalent of "Step 2: Discard remainder of killer whale carcass" making success seem as accessible as Larry Ellison's yacht habit.

We are surprised that anybody nowadays is considering leaving one waning calendar-only product for another waning calendar-only product.

If it works for you, that's all the matters.

As always our message is: try it out for yourself beforehand and follow Reagan's maxim of "trust but verify."

But also be prepared to migrate again in a few years.