Thursday, August 30, 2007

Exchange 2007 Impersonation - Debugging Protocol

We've hit on many different reasons why service account fail to have Impersonation and Send-As, Receive-As rights set correctly. Here are some areas to check as you create a service-account and grant it Impersonation rights:

  1. Create a service account (in this example: Ex2007)
    The Ex2007 account should NOT be a member of any of the Exchange Administrative Groups. Set your permissions in Default Domain Security Settings-User Rights Assignment-"Allow logon locally" for this user
    Note: Exchange explicitly denies Impersonation for all accounts in those groups
  2. All Exchange Servers should be members of Windows Authorization Access Group
  3. Determine if your users SMTP address is alias@FQDN. If it isn’t, you’ll have to impersonate using the User Principal Name (UPN). This should be defined as alias@FQDN.
  4. Set these five rights by running these commands in Exchange Management Shell

    Add-ADPermission -Identity (get-exchangeserver).DistinguishedName -User (Get-User -Identity Ex2007 ¦ select-object).identity -AccessRights GenericAll -InheritanceType Descendents
    Add-ADPermission -Identity (get-exchangeserver).DistinguishedName - User (Get-User -Identity Ex2007 ¦ select-object).identity -ExtendedRight ms-Exch-EPI-Impersonation
    Add-ADPermission -Identity (get-exchangeserver).DistinguishedName - User (Get-User -Identity Ex2007 ¦ select-object).identity -ExtendedRight ms-Exch-EPI-May-Impersonate
    Add-ADPermission -Identity (get-exchangeserver).DistinguishedName - User (Get-User -Identity Ex2007 ¦ select-object).identity -ExtendedRights Send-As
    Add-ADPermission -Identity (get-exchangeserver).DistinguishedName - User (Get-User -Identity Ex2007 ¦ select-object).identity -ExtendedRights Receive-As

    Note One: These grant permissions at the SERVER level. You can also grant permissions at the database, user, and contact-levels.

    Note Two: If you have multiple servers, you must grant Impersonation at each server (or database). Exchange 2007 does not have any system-wide Impersonation permission capability.
  5. If your CAS server sits behind a load-balancer, give the ms-Exch-EPI-Impersonation rights to the Ex2007 account for ALL CAS boxes behind the load-balancer. If your mailbox servers are on a machine other than the CAS servers, give ms-Exch-EPI-Impersonation rights for the Ex2007 account for ALL mailbox servers.
  6. Verify that the Ex2007 account has rights you've just granted:
    Open Active Directory Sites and Services.
    In the console tree, right-click Active Directory Sites and Services, point to View, and then click Show Services Node.
    Expand the service node (e.g. Services/MS Exchange/First Organization/Admin Group/Exchange Admin Group/Servers.
    You should see your CAS server(s) there. View “properties” for each CAS server, ensuring your service account is there, and under the privileges exchange Impersonation is checked (and not grayed out). See Figure 1.
    If the permissions or account is not present, add it, and make sure the Impersonation, and Send-As, Receive-As boxes are checked.

    Figure 1-Exchange service account impersonation properties

    (Source: http://technet2.microsoft.com/windowsserver/en/library/d4e342bc-2e26-4bd1-ba9b-b5bf58b562081033.mspx?mfr=true)
  7. Make sure you do not have accounts where permissions are not inherited (this often happens for accounts that are members of the "IT" group). If so, you’re going to need to explicitly grant permissions to members of that group or OU.)
  8. Strange things happen if you are trying to impersonate cross-forest. This suggests that the account doesn’t have sufficient rights to read AD.
  9. Verify that the service account (e.g., Ex2007) has those permissions set (Allow impersonation to Exchange Personal Information, send-as, receive-as) on the storage group and the mailbox store (see Figure 2 below.)

    Figure 2– Verify permissions at the Mailbox store
  10. If you are on a test-server and are using the default security certificate, is that certificate put in the 'trusted root'?
    Launch any secure page: e.g. for the server striper: https://striper/ews/exchange.asmx. When the certificate warning page appears, "Trust" the certificate, "View" the certificate, and use the "Install Certificate" wizard to "Place all certificates in the following store" (the store is the Trusted Root Certification Authorities). See Figure 2.


    Figure 3–Placing the Certificate in the Trusted Root Cert Authority

    Most sane human beings would try to verify all these permissions using Outlook Web Access. If you try this and get an error "You do not have permission to open this mailbox" check out KB Article 940846.
Need some Exchange Calendar applications or utilities developed for your enterprise-sized organization?  Contact us.

Wednesday, August 29, 2007

Outlook and Entourage in Exchange 2007

Quick note on the difference between Entourage and Outlook in Exchange 2007 environments:

Outlook clients need to point to the CAS. See: The Exchange 2007 Client Access Server (CAS) role

Entourage clients need to point at the back end 2007 servers. See: Using Entourage with Exchange 2007

Sunday, August 26, 2007

Setting Permissions for Migration into Exchange 2007

If you've been through a migration into Exchange or just reading up on the intricacies of the process, you've seen a recurring theme: Permissions.


In both Exchange 2003 and 2007 the first problem you're likely to run into is setting permissions properly to insert calendar server data during a migration. The necessary permissions have changed in the past with various roll-ups and service packs and will undoubtedly change in the future.


As of the current Exchange 2007 release, you must set GenericAll, Send-As, Receive-As, and Impersonation using the Exchange Management Shell.

The following examples will create an account called ex2007@lab.sumatra.local with appropriate permissions on server “myServerName.” Of course you can create your own service account and must use your lab or production domain name.

Add-ADPermission -Identity "CN=myServerName,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=lab,DC=sumatra,DC=local" -User ex2007@lab.sumatra.local -AccessRights GenericAll -InheritanceType Descendents

Add-ADPermission -Identity "CN=myServerName,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=lab,DC=sumatra,DC=local" -User ex2007@lab.sumatra.local -ExtendedRights Send-As

Add-ADPermission -Identity "CN=myServerName,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=lab,DC=sumatra,DC=local" -User ex2007@lab.sumatra.local -ExtendedRights Receive-As

Add-ADPermission -Identity "CN=myServerName,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=lab,DC=sumatra,DC=local" -User ex2007@lab.sumatra.local -extendedRight ms-Exch-EPI-May-Impersonate

Add-ADPermission -Identity "CN=myServerName,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=First Organization,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=lab,DC=sumatra,DC=local" -User ex2007@lab.sumatra.local -extendedRight ms-Exch-EPI-Impersonation.

You could also execute the commands this way:

Add-ADPermission -Identity "myServerName" -User ex2007@lab.sumatra.local -AccessRights GenericAll -InheritanceType Descendents

We add GenericAll because sometimes the service account needs additional permissions.

You should not add this account to any administrative groups, e.g., administrators, domain administrators, etc.

Impersonation in particular seems to be the source of a huge amount of problems.

Tuesday, August 07, 2007

Create user and resource accounts in your Exchange 2007 lab with Exchange Management Shell

Sumatra runs client data through a series of rigorous tests as part of our QA process. We insert client calendar into Exchange in our “sandbox” test lab during one phase of testing. This requires we build user and resource accounts in bulk. Our prior home-grown tools do not work in Exchange 2007 because Microsoft killed CDOEX in Exchange 2007. This gave us a chance to learn Exchange Management Shell (EMS) and rework our tools for public use.

The EMS vocabulary is obtuse, but not hard.

To create the accounts, you only need two steps:


  1. Export the account list (do resources and user accounts separately)

  2. Build the mailboxes.

First, create two CSV (export) files - one for resources, one for users.

The script we wrote requires five columns of data – the OU, the descriptive name, the alias, the UPN, and the account type. You can build this file in Excel, or Sumatra customers can use data from the Users table. (If you’ve got a database v8.7.5.2+ from Sumatra, the query you can start with is called “N_X”.)

Here’s how each of the columns are defined:

  1. OU: “Users”
    Note : If you have different OUs for your users and resources, remember to change them here.
  2. Name: Trim(Trim([firstname]) & " " & Trim([lastname]))
  3. Alias: Login
  4. UPN: [Login] & "@lab.sumatra.local"
    Note : Remember to change the lab.sumatra.local to your test lab domain
  5. Type
    Note : The criteria will be Individual OR Resource
  6. Foreign (uncheck the show box, and apply a criteria of false)

    Here’s a screen shot of the query:


If you are running MS Access, save the query, then right-hand click on the query name, and Export. (If you are running the N_X query, it produces a table because it “prompts” you for information. Export that table.) You want to export:

  1. As type “Text”,
  2. Enter the file name with an extension of .CSV. Select the export button.
  3. Output the fields as “Delimited”,
  4. The delimiter is a comma,
  5. Check “Include field Names on the First Row”, and
  6. Select the Text Qualifier as {none} - not quote (“)
  7. Select “Finish”

Modify the query, and repeat the export process for “resources”.

Here’s a sample export of resource account information


Now, run Exchange Management Shell, and “cut and paste” these three commands:

Create a variable “Temp” that contains a password (if you want one)

$Temp = ConvertTo-SecureString "N0Pwd4U" -asPlainText –Force


Import the users. Remember that you will have to make at least three changes:



  1. The “path” to the CSV file

  2. The Organizational Unit

  3. The Database Name

  4. (optional) The Password

    Import-CSV "C:\Sumatra\UserExport\tmp_UserList.csv" ForEach-Object -Process {New-Mailbox -Name $_.Name -Alias $_.Alias -UserPrincipalName $_.UPN -OrganizationalUnit "lab.sumatra.local/client/Test" -DisplayName $_.Name -Database "Striper\First Storage Group\FSG_MBX_DB1" -Password $Temp -ResetPasswordOnNextLogon $false}

Import the resources. As above, remember to change the path, the OU, the DB Name.

Import-CSV "C:\Sumatra\UserExport\tmpResList.csv" ForEach-Object -Process {New-Mailbox -Name $_.Name -Alias $_.Alias -UserPrincipalName $_.UPN -OrganizationalUnit "lab.sumatra.local/resources" -DisplayName $_.Name -Database "Striper\First Storage Group\FSG_MBX_DB2" -Password $Temp -ResetPasswordOnNextLogon $false -Room:$True}

Here’s a screen shot of the results:


Finally, please note that in Exchange 2007 resources are disabled by default. Remember to enable the accounts. Also, for the test lab (and for the insertion), you should NOT set automatic processing of meeting requests (i.e. -automateprocessing:AutoAccept).

THANKS to sharp-eyed reader Vince for pointing out an error in one of our lines (corrected Oct. 4, 2007)!

Thursday, July 12, 2007

Migrating to Exchange 2007

Things are really busy here in Sumatra (which is not in Asia but is rather an autonomous people's republic just outside of Cambridge, Massachusetts). Currently the user count of clients waiting to migrate to Exchange 2007 from Meeting Maker and Oracle Calendar is over 50,000 (the user count of prospects waiting on Zimbra is less than a tenth of that so we budget our time accordingly).

And we have good news!

On Monday we released the Exchange 2007 insertion code to a client with 3000 users for their test environment.



As with our other migrations this runs server-to-server, reproduces meeting guest lists, responses, and recurrence patterns as closely as possible, and includes the famous Sumatra "Undo" capability.

Preliminary field results are good and we'll update you as we proceed.

Thursday, June 21, 2007

How many Recurring Appointments Does it Take to Screw Up Outlook in E2K7?

Editor's note: Yipee! As of 2/28/2008 Microsoft found and fixed this in the "Update Rollup 1 for Exchange Server 2007 Service Pack 1" (see: http://support.microsoft.com/kb/943371/)


The answer: 1300 (not 1301, we mean 1300)

While debugging our insertion technology for migrations from legacy calendaring systems into Exchange 2007, Russ decided to insert 23,000 appointments into a single calendar (which is not as rare a real-world occurrence as you might think).

When we narrowed th einsertion to just recurring items we found a hard limit at 1300:




Interesting variation on this: even with this error we have no problem adding one-time meetings or appointments -- but the second we try to make them recurring the error pops up.

We were really surprised to be getting CDO errors server-side, especially since CDOEXM is obsoleted and CDOEX is denigrated in 2007, and our new insertion code is based on EWS and has had all CDO-specific code ripped out of it with the diligence of a vegan removing meat and dairy products from their diet.

The specific Outlook error message: "There is not enough memory available to perform the operation." led us to some server-side errors that looked like this:

Exception type: Microsoft.Mapi.MapiExceptionNotEnoughMemory
Exception message: MapiExceptionNotEnoughMemory:
Unable to save changes. (hr=0x8007000e, ec=-2147024882) Diagnostic context
The event logs are EXCDO errors
Event Type: Error
Event Source: EXCDO
Event Category: General
Event ID: 8199
User: N/A
Description:
Calendaring agent failed in message save notification with error 0x8007000e on judy@lab.sumatra.local: /Calendar/test5.EML

We didn't find anything on specific 2007 problems, but this does sound very similar to an existing 2003 problem: You cannot save or delete a recurring appointment from a Calendar that is maintained on an Exchange Server 2003 computer, aka KB 892524.

So we wanted to put this up to let folks know and see if anyone else had been experiencing this problem.

Friday, June 01, 2007

Meeting Maker to Zimbra Migration

So given the fact that Zimbra is an open source calendaring system and Meeting Maker is the definition of legacy proprietary -- what can come over and what cannot?

Let's deal with the limitations first of all.


Meeting Maker calendar attributes that we do not transfer to Zimbra:

  • Private activities: We're taking this attribute along so that when Zimbra supports Private appointments (This is coming in their next version 5.0) it will be there -- but the current version has no way of (not) displaying them.

  • "Weekend move": Zimbra does not have this functionality so affected meetings will not move.

  • Comments: We've been dropping these for five years in Exchange migrations and there's been no complaints.

  • Colors / Labels: The Zimbra palette is very different from the primary colors of Meeting Maker so we don't even try to match colors.

  • Proxies: We extract them from Meeting Maker we'll look at what we can do to insert the same proxy rights (thank you to KevinH who with amazing speed pointed out Zimbra DOES have the ability to Share calendars - I just wasn't looking hard enough)

  • To-Dos: Zimbra has capability for to-dos in the user interface after version 5.0. So only supported for 5.0.

  • Optional / CC / BCC guests: Zimbra hdoes not have this functionality so we make all guests Required guests except for BCC (which would defeat the original purpose of a BCC) and respond appropriately. BCC guests get the meeting put in their calendar separately from the rest of the distribution list.

Meeting Maker calendar attributes that transfer to Zimbra:


  • Recurrence patterns (we even think we have a chance of solving the infamous "Refrigerator Bug" we always warn you about)
  • Meeting Agendas
  • Guest lists
  • Guest responses
  • Meeting Exceptions
  • Guest exceptions
  • Contacts
  • To-Dos in Version 5.0.
  • Banners
  • Holidays (we can insert into each calendar separately since Zimbra does not have server-wide holidays)
  • Conference Rooms
  • Resources
  • Time Zones

Please keep in mind this is a fluid list and we're likely to change a few things over time as new functions are added, as we get more clever in our migration implementation, or as we discover "gotchas" that are currently hidden to us.

Keep in mind we're doing all this server-side with no end user intervention.

The one functionality we're striving to add is the one that many of you have found so useful for testing in the past: UNDO.

We'll keep you informed as this migration technology develops.


Thursday, May 24, 2007

Meeting Maker to Zimbra Migration Function Mapping

Based on requests from the field we've begun creating a full-function migration path from Meeting Maker to Zimbra calendar. As with our other migrations this method preserves recurrence patterns, guest responses, and the live nature of meetings. We have a prototype running in our lab the results from which are shown in the screen shots below.



Let's say Adam invites Claudette to three meetings, which in Meeting Maker she Accepts, Declines, and Decides Later.

Adam's calendar looks like this in Meeting Maker:






And after migration Adam's calendar looks like this in Zimbra:



Claudette's looks like this in Meeting Maker:





And after migration Claudette's calendar looks like this in Zimbra:


Note that the model for display of calendar state information is completely opposite between the two products. In Meeting Maker, the proposer / owner of a meeting is the one who sees an instant display of guest response status. In Zimbra, it is the guest who has the "one glance" view of her response status. In going from Meeting Maker to Zimbra this radically simplifies things for the guest (especially compared with the clunky "proposals box" in Meeting Maker). However, it does make it harder for those used to the symbols Meeting Maker uses to manage meetings to see them at a glance. This information does display very handily in the proposer's mail Inbox as guests make decisions.

Note that we are opting to map "Decide Later" as "New" in Zimbra rather than "Tentative" to highlight the need to make a decision on the meeting.

Wednesday, May 16, 2007

E2K3 to E2K7 Upgrade Problem: Exchange Resource Manager

Two of our favorite people on the planet, Nancy and Yoly at Qualcomm, report problems with Exchange Resource Manager resources when going from Exchange 2003 to Exchange 2007.

Symptoms
Meeting invitations/updates sent to conference rooms that have been moved from Exchange 2003 with ERM to Exchange 2007 with resource calendar assistant are ignored and/or deleted without being processed.

The Problem
ERM has a bug that causes mailbox attribute 0x8217 to be set to 1 (organizer) when it places meetings on the calendar.

In OutlookSpy you would see this:



A Microsoft representative was able to confirm via testing that when 0x8217 is altered prior to the resource mailbox being moved from Exchange 2003 to Exchange 2007 the E2k7 Resource Calendar Assistant is unable to act on the meeting invitation/update and treats it as a non-meeting message (deletes it).

The fix is to set 0x8217 to 3 (invitee), with potentially 1000s of meetings with this issue it would be very time consuming to do it manually, so we wrote one to fix it.

Not surprisingly we put it into the Sumatra Utilities.

The latest version has the following additional flags:

/ERM:fix

This can change all calendar items with x8217=1 (from ERM) and set the value to 3.

If the /ERM switch is used without the :fix then the tool will run and produce counts.

If the ":fix" qualifier is used, then the appointments will be updated.

Can also be used with /e (show all) and /s (summary)

So for example, looking at the resource "LCD":

su /ERM /u:lcd /e

Gives the following REPORT in outfile.txt

User:lcd
Resource Mtg Organizer Mtg Name MtgStart MtgEnd Meeting Type
Validated lcd lcd - test test test - - Appointment
1 Resources processed.
1 Total meetings read.
1 meetings with ERM flag=1
0 meetings skipped (didn't have flag=1)
ReadFrom:
WroteTo: outfile.txt

su /ERM:fix /u:lcd /e

Will fix and record which ERM-managed meetings are repaired.

Saturday, April 21, 2007

Been working with the Zimbra calendaring functions

Just because we get asked about everything we've started taking apart the Zimbra calendaring functions. In general -- it's not up to Exchange / Outlook standards (so far), but truthfully it's not bad (i.e., a corporation would take it over giving all its calendaring data to Google any day).


Things I really like about it -- the way accepted, declined, and tentative meetings show up with varying degrees of transparency. Very intuitive, very elegant:



There's also a fairly decent schema for resources.


On the other hand there's zero concept of private activities or degrees of delegate access.


Calendar migration from Outlook via PST is better than we typically see with most packages. Zimbra manages to preserve the recurrence pattern of meetings and exceptions, and there is an option to change your email address on meetings from your former email to your new one if you're changing.

On the downside, it doesn't change guests' email so when I brought it up in our test lab (changing domains) I had outdated guest lists. Migration is also done on a single user basis (making it a pain if you have a large base you're migrating).


I didn't bother with the Domino or GroupWise migrators.

Friday, April 06, 2007

We've noticed everyone else with a blog is into visuals

We've noticed that everyone else with a blog has visuals to publish and since we're calendar server wonks this puts us in a rather difficult position (calendars looking so boring and all) -- but we do have this image:

of a T-shirt from a migration we did into Exchange of a legacy calendar system called "Meeting Maker."

We moved 9,900 users and resources that weekend.

Thursday, April 05, 2007

Update to Sumatra Utilities - current version 2.3.25

Kudos to Shabana at Marfic who found a bug in holiday insertion with the Sumatra Utilities.

We had to rev the code so that holidays would insert correctly with the new CDO that Microsoft issued to cause fix the DST fiasco.

If you're trying to insert Holidays please use version 2.3.25.

Monday, April 02, 2007

Exchange 2007 Installation for 2003 Coexistence -- Beware of this....

We were trying to install Exchange 2007 on one of our lab servers so we could continue to coexist with an existing Exchange 2003 domain.

If you are trying to do this:

Make sure you are running the install as Domain Admin and Schema Admin (and for good measure also an Enterprise Admin).

We neglected to do this and found intermittent problems throughout our initial configuration.

Yes -- it's obvious in hindsight -- but it was not obvious to us on Thursday afternoon when we were considering taking sledgehammers to our hardware.

Had we done this using VMware's 64 bit emulator we could have rolled back Exchange and tried again. Instead, we'll be reformatting and trying again.
We're hoping someone else will benefit from our experience.

Thursday, March 22, 2007

Migrating iPlanet Calendar to Exchange via SuPump

Over the last five years of doing calendar migrations we've heard of pretty much every legacy calendar system out there. One that comes up now and again is iPlanet, once bundled with Netscape (remember them?).

iPlanet has a tool: csexport.

The file extension of the OUTPUT file (.ics or .xml) determines the format it will export to: ither iCalendar or XML

So since suPump.exe takes an XML file as input for incorporation into Exchange, this gives a quick way of server-side migration.

You use it as follows:

csexport -c jsmithcal calendar jsmith.xml

then

suPump.exe /k /AT:UserID /u:jsmith /DT:A /file:"jsmith.xml"
Will add appointment data for a UserID where the XML data is in file “calendar.xml”. This command does not clear the calendar calendar before inserting data.

Tuesday, March 20, 2007

Sumatra Pump Contact Schema

SuPump.exe uses the following fields for inserting contacts. Size limits are up to available limits in Outlook.


ContactID: alpha numeric identifier (can be left blank)
ContactNum: Contact Number
OwnerUserID: UserID or mailboxAlias
FirstName:
LastName:
Title:
Dept:
Room:
Company:
Address:
City:
State:
Zip: XXXXX-XXXX
Country:
Email:
HomePhone: XXXXXXXXXX
WorkPhone: XXXXXXXXXX x XXXXX
Fax: XXXXXXXXXX
MobilePhone: XXXXXXXXXX
Pager: XXXXXXXXXX
OtherPhone1: XXXXXXXXXX
OtherPhone2: XXXXXXXXXX
OtherPhone3: XXXXXXXXXX
Custom1
Custom2
Custom3
Custom4
NoteInfo :additional information

Sunday, March 18, 2007

If an attendee to an occurrence of a recurring meeting is removed then the series is updated, the removed attendee is re-invited.

Chris Quinn from Milwaukee writes that:

If an attendee to an occurrence of a recurring series is removed.

Then the series is updated.

The removed attendee is re-invited and the meeting shows back up on their calendar.

The following steps can be followed to reproduce the error.

1. Create a recurring meeting with “Organizer 1” and “Attendee 1” for at least 2 days.
2. Open any occurrence of the meeting and remove “Attendee 1” and send the update
3. Open the series and make any modification(e.g., Add a note to the details) send the update.

You should notice that “Attendee 1” still has the meeting on their calendar, however when you open the occurrence of the meeting that had “Attendee 1” removed, you will notice that “Attendee 1” is not in the meeting.

Chris further adds:
This is not a problem in CDO 1.21 .... This is a problem in Outlook. When a recurring series is updated it does not send the correct updates for the occurrences.
This is similar to a problem Microsoft has acknowledged with resources of which we had written earlier:


We've had reports of meeting locations being overwritten to exceptions to
recurring meetings. As Microsoft KB Article 916108 shows, it is an acknowledged bug in Exchange.

Saturday, March 17, 2007

Sample Syntax for Exchange Insertion with the Sumatra Pump

To read and insert a file contacts.xml into “Sumatra.com”. Tags the items with the default keyword
supump.exe /dn:Sumatra.com /file:contacts.xml /k

Insert one appointment for USERID=37238L. Remove data prior to insertion. Read source data from http (oracle server).
supump.exe /UNDO /k /AT:userID /u:37238L /DT:A /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_calendar?userid="

Appends one appointment for ExchangeAlias T_L to existing data (missing /undo)/ Read data from http.
supump.exe /k /AT:Exchange /u:T_L /DT:A /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_calendar?userid="

Remove user’s 37238L’s Appointment data that is tagged with the default keyword
supump.exe /dn:Sumatra.com /undo /k /u:37238L

Insert appointments for USERIDs in a text file. Remove appointment data prior to insertion. Read data from http.
suPump.exe /UNDO /k /AT:UserID /in:"F:\Sumatra\Clients\UserIds.txt" /DT:A /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_calendar?userid="

Insert appointments for ALL exchange users with USERIDs in a text file. Read data from http. Remove appointment data prior to insertion
suPump.exe /UNDO /k /AT:Exchange /ALL /DT:A /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_calendar?userid="

Add appointment data for one UserID where XML data is in file “calendar.xml”. Clear calendar before inserting data.
suPump.exe /undo /k /AT:UserID /u:37238L /DT:A /file:"F:\Sumatra\Clients\calendar.xml"

Insert contact data for ALL User IDs. Clear contacts before insertion. Read data from http.
supump.exe /UNDO /k /AT:Exchange /ALL /DT:C /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_contact?userid="

Insert Task data for User IDs in a file. Clear task data before insertion. Read data from http.
supump.exe /UNDO /k /AT:UserID /in:"F:\Sumatra\Clients\UserIds.txt" /DT:T /http:"http://oracle-dev.site.edu/dart/harpo/" /PKG:"EXCHANGESYNC_PKG.run_task?userid="

Insert all data into the domain name “lab.sumatra.com” for aliases defined in the file IT_Test.txt. Obtain the data from the web, and tag it with keyword testrun4
Suxml /dn:lab.sumatra.com /k:testrun /u:37238L /k:testrun4
/HTTP:"http://oracle-dev.site.edu/dart/harpo”
/pkg:"EXCHANGESYNC_PKG.run_calendar”

Friday, March 16, 2007

Reports of problems with solution to KB 932511

Chris Quinn, one of our brethren calendar and scheduling wonks, has reported an additional problem with the solution to KB article 932511: Exception meeting requests are deleted from the calendar in Outlook 2003 when recipients use a CDO 1.21 application to accept the master meeting request


This of course comes up because of the DST issue in North America, in his case he had an exception to a meeting that had been scheduled to another resource. The fix on 932511 and the Rebaser put the exception back on the ORIGINAL resource.

We'll keep you updated on if there is a fix to the fix to the fix (we think the recursion only goes that far, but after three we just lose interest and move on to other projects).

Chris also reports that:
Because we forced all the updates we also found out about another
problem. We found that OWA views can differ significantly from the Outlook
views. So we found another article that was quite interesting.
I thought you'd get a kick out of it. Now we can all POOF our calendars…
http://blogs.msdn.com/stephen_griffin/archive/2007/02/21/poof-your-calender-really.aspx
NB: To all of your looking to migrate Proxies and Designates from legacy calendar servers to Delegates in Exchange -- we need to use CDO 1.21 to accomplish this and the acknowledged memory leaks (see KnowledgeBase Article 891509 A memory leak condition occurs when you create a CDO program or a MAPI32 program to log on or log off many mailboxes in Exchange Server 2003 SP1) are one reason we treat this very carefully. See also KBs 901014 and 913643.

Syntax for SuPump.exe

The Sumatra Pump (which on occasion we pronounce "SumPump") uses the following syntax (which will be familiar to all of you using the Sumatra Utilities):

suPump /dn:domain /sn:servername /k:kwd /all /u:usr /in:infile /at:acct_type /dt:data_type
/out:outfile /undo /v:file /http:url /pkg:p
where:

/dn:domainname =Run on this "domain name"

/sn:serverName =The server name

User
/at:acct_type=Account type (acct_type=Specific or Exchange) default is Exchange alias.
/all=Retrieve ALL Aliases with SpecificIDs (employeeID)
/in:infile=user INput file, one Exchange Alias or SpecificID per record (default infile.txt)
/u:user =process this Alias or SpecificID User (supersedes /in:)
SpecificID in this case means anything you want to define, an account number or employee ID for example.

/dt:data_type=Data type = Activities, Tasks, Contacts (default is Activities)

/k:kwdstem = Assigns a category during an insert. E.g., /k=holiday2006; Also limits mtgs/appts/contacts/todos tagged with Keyword stem e.g. /k:ca finds ca,car,cat (/k default:mmconv102659080256Z).

/out:outfile=Output file (default outfile.txt)

/undo=remove items from calendar (tagged w/ keyword). Items to be removed is a function of the /dt

Data Location
/file:filestring=passes an XML file (path included) to be processed
/HTTP:URL=Obtain a file to be processed from HTTP address using this URL root. Note, the URL must be enclosed in quotes
/PKG:Pkgname=defines the package name to extract the data. The package will be appended to the URL root to retrieve the data. The package name must be enclosed in quotes.

Monday, March 12, 2007

Sumatra Pump: The Third Way to get Calendar Data into specific accounts

In Exchange there are two ways to get data into a user calendar:


  1. Invite the user to a meeting which they accept
  2. The user or their delegate types an entry themselves
This was too restrictive for a major graduate business school in the Northeast. There was no way for users to "subscribe" to calendar events relevant to their needs, such as course schedules and assignments, on-campus recruiting, and then have those events appear on their calendars.

They asked Sumatra to develop an Exchange server-based tool we refer to as the Sumatra Pump, suPump.exe.

A bit of background

This school built a web-based calendaring solution that offers its students, faculty, and staff a single source to access all academic calendars and schedules including the academic calendar, class schedules, club events, and one-on-one meetings such as the interview calendar. The web-based solution also provided users with a list of contacts and tasks. Users can personalize the solution by setting preferences to select the calendar data they wish to receive. End users wanted the calendar data in Outlook, so the school built an Outlook add-in that allowed users to merge selected calendar data into their Outlook calendar.

Fine and good, but this was manual -- the user had to initiate the command sequence. The school’s IT department wanted a solution that could be scheduled each night to push the requested data into Outlook.

Sumatra automated the calendar data merge process by implementing a server-based “Push” product on Exchange. The goal of this Push product is to deliver calendar, task, and contact updates to Outlook end users on both a scheduled basis and an on-demand basis.
This solution had the following results:

  • Consolidated scheduling data delivery at the Exchange server level;
  • Reduced system maintenance and management costs;
  • Minimized the negative productivity impact of requiring users to initiate the calendar merge sequence, or by re-keying calendar data into Outlook;
  • Extended support to all Exchange clients on-site not served by the client-side VB macro then in use (including, for example, OWA and Entourage users);

The suPump takes as input an XML file. For Activities the file has the following structure:

ActivityID: alpha numeric identifier (can be left blank)
UserID: SchoolID or mailboxAlias
Name: Activity name
Location:Activity location
Banner:True/False - Is this an all day event
Private:True/False - Should this be marked as private
Label:What color label (0-11) corresponds to Outlook labels
Duration:Duration in minutes
ActivityTime:Activity start date and time
LastTime:Activity end date and time
TimeZone:timezone (see below)
FreeBusy:"Free", "Busy", "Tent","OOF"
RecurType: Not implemented for this client
Ongoing:Not implemented for this client
DaysMask:Not implemented for this client
WeeksMask:Not implemented for this client
DaysFromEndOfMonth:Not implemented for this client
Period:Not implemented for this client
Exceptions: Not implemented for this client
Reminder: number of minutes
NoteInfo: additional information

Contacts and Tasks have similar formats.

We've been thinking of using this for simple calendar / contact / task migrations for formats we do not currently handle (iPlanet calendar migration is one of the cases occasionally requested).

This is also something we've looked at as part of a co-existence strategy for alternate calendar servers and Exchange.