Saturday, October 17, 2009

Resource Mailboxes – Creation and Configuration

I was at a clients site during the week helping them out with some Exchange 2003 issues and was talking to them about Exchange 2007/2010 and one of the things that really got them excited was the way that Exchange 2007/2010 deals with resource mailboxes.

This particular client has had no end of troubles with resource mailboxes. This motivated me to post this blog on how things were and how they are now, and most importantly how to set up your resource mailboxes in Exchange 2007/2010.

The Exchange 2003 Way

This is going to be a fairly brief run down on how to set up and configure resource mailboxes in Exchange 2000/2003

Technique 1 – Manual Configuration

  1. Open ADUC and create the required user object in AD and give them a mailbox on the appropriate Exchange server and mailbox store
    1. Log in using the AD account you created for this resource.
    2. Configure Outlook for this account
    3. Go to Tools > Options
    4. In the Calendar section clear the “Default reminder” checkbox
    5. Click on the “Calendar Options” button
    6. Set the hours that this resource is available during the working week by using the “Calendar work week” section, in this example the resource is available Mon – Fri 9am – 4pm.

    Now that we have set up the basic calendar options we have to set up the mailbox to automatically respond to meeting requests.

    1. Whilst in Tools > Options > Calendar Options
    2. Click on Resource Scheduling
    3. Check the “Automatically accept meeting requests and process cancellations” and “Automatically decline conflicting meeting requests” checkboxes
    4. Click OK. A second dialog box will appear, asking to set standard permissions for all users, click OK.

Technique 2 – Auto Accept Agent

I could write a whole series of posts on seting up, configuring and troubleshooting AAA but instead I will send you to this TechNet article on how to setup and configure AAA.

Basically AAA automates the above process, this is particularly useful if you have a large number of resource mailboxes and the above technique is going to take a long time to get through.

My personal preference is to use Technique 1 where ever possible as I have had the most success with it and minimal additional configuration after the initial setup.

The Exchange 2007/2010 Way

As usual I will go through both the GUI and Powershell way to perform these tasks – use which ever option you are more comfortable with.

The GUI Way

  1. Log onto you Exchange 2007/2010 Server and open the EMC
  2. Navigate to Recipients > Mailboxes
  3. In the Action pane on the right click New Mailbox > Select Room Mailbox
    image
  4. Select new or Existing user. Note: If you wish to use and existing user account it MUST be disabled before it can become a resource mailbox
    image
  5. Fill in the blanks for a new user
    image
  6. Select a database and Alias
    image
  7. Review the details then click next
    image
  8. To configure auto accept on this resource you MUST use Powershell. Open EMS and type the following:

    Set-MailboxCalendarSettings -Identity "Board Room Adelaide Office" -AutomateProcessing:AutoAccept
  9. To set this on all room mailboxes we can use some powershell smarts to do it all in one easy process

    Get-mailbox -RecipientTypeDetails RoomMailbox | Set-MailboxCalendarSettings -Identity "Board Room Adelaide Office" -AutomateProcessing:AutoAccept

Powershell Method

Type the following into the EMS

set-mailboxcalendarsettings (New-Mailbox -Name 'Board Room Adelaide Office' -Alias 'SABoardRoom' -OrganizationalUnit 'Exchangelabs.local/Exchange Users' -UserPrincipalName 'SABoardRoom@Exchangelabs.local' -SamAccountName 'SABoardRoom' -FirstName 'Board' -Initials '' -LastName 'Room ' -Database 'EXCHANGE2007\First Storage Group\Mailbox Database' -Room) -automateprocessing:AutoAccept

Additional resource settings

These are a few extra command you can add to the Powershell commands and what they do (taken from TechNet here)

AddAdditionalResponse

The AddAdditionalResponse parameter specifies whether additional information would be sent from the resource mailbox when responding to meeting requests.

This parameter is ignored unless the AutomateProcessing parameter is set to AutoAccept.

AdditionalResponse

Use the AdditionalResponse parameter to specify the additional information to be included in responses to meeting requests.

AddNewRequestsTentatively

Set the AddNewRequestsTentatively parameter to $true to have the Calendar Attendant put new calendar items tentatively on the calendar. If the AddNewRequestsTentatively parameter is set to $false, only existing calendar items are updated by the Calendar Attendant.

AddOrganizerToSubject

Use the AddOrganizerToSubject parameter to specify whether the meeting organizer's name will be used as the subject of the meeting request.

This parameter is ignored unless the AutomateProcessing parameter is set to AutoAccept.

AllBookInPolicy

Use the AllBookInPolicy parameter to specify whether to automatically approve in-policy requests from all users.

AllowConflicts

Use the AllowConflicts parameter to specify whether to allow conflicting meeting requests.

AllowRecurringMeetings

Use the AllowRecurringMeetings parameter to specify whether to allow recurring meetings.

AllRequestInPolicy

Use the AllRequestInPolicy parameter to specify whether to allow all users to submit in-policy requests.

These requests will be subject to approval by a resource mailbox delegate unless the AllBookInPolicy parameter is set to $true.

AllRequestOutOfPolicy

Use the AllRequestOutOfPolicy parameter to specify whether to allow all users to submit out-of-policy requests.

Out-of-policy requests are subject to approval by a resource mailbox delegate.

AutomateProcessing

Use the AutomateProcessing parameter to enable or disable calendar processing on the mailbox.

If this parameter is set to None, both resource booking and the Calendar Attendant will be disabled on the mailbox. If set to AutoUpdate, the Calendar Attendant will process meeting requests and responses. If this parameter is set to AutoAccept, resource booking will be enabled on the mailbox.

BookingWindowInDays

Use the BookingWindowInDays parameter to specify the number of days meetings are allowed to be booked in advance.

BookInPolicy

Use the BookInPolicy parameter to specify a list of users who are allowed to submit in-policy meeting requests to the resource mailbox. Any in-policy meeting requests from these users will automatically be approved.

ConflictPercentageAllowed

Use the ConflictPercentageAllowed parameter to set a conflict percentage threshold for recurring meetings. If the percentage of instances of a recurring meeting that conflict with other meetings exceeds this number, the recurring meeting request will be declined.

DefaultReminderTime

Use the DefaultReminderTime parameter to specify the default reminder time for the meeting requests.

DeleteAttachments

Set the DeleteAttachments parameter to $true to remove attachments from all incoming messages.

This parameter is ignored unless the AutomateProcessing parameter is set to AutoAccept.

DeleteComments

Use the DeleteComments parameter to remove any text in the message body of incoming meeting requests.

This parameter is ignored unless the AutomateProcessing parameter is set to AutoAccept.

DeleteNonCalendarItems

Set the DeleteNonCalendarItems parameter to $true to remove all non-calendar items received by the mailbox.

DeleteSubject

Use the DeleteSubject parameter to remove the subject of incoming meeting requests.

This parameter is ignored unless the AutomateProcessing parameter is set to AutoAccept.

DisableReminders

Use the DisableReminders parameter to specify if you want to disable reminders for meetings in the mailbox.

EnableResponseDetails

Set the EnableResponseDetails parameter to $true to include the reasons for accepting or declining a meeting in the response e-mail message.

EnforceSchedulingHorizon

Use the EnforceSchedulingHorizon parameter to specify whether recurring meetings that have an end date beyond the booking window will be rejected.

ForwardRequestsToDelegates

Use the ForwardRequestsToDelegates parameter to specify whether to forward incoming meeting requests to the delegates defined for the mailbox.

IgnoreDefaultScope

The IgnoreDefaultScope parameter instructs the command to ignore the default recipient scope setting for the Exchange Management Shell and use the entire forest as the scope. This allows the command to access Active Directory objects that are not currently in the default scope. Using the IgnoreDefaultScope parameter introduces the following restrictions:

  • You cannot use the DomainController parameter. The command will use an appropriate global catalog server automatically.
  • You can only use the DN for the Identity parameter. Other forms of identification, such as alias or GUID, are not accepted.

Instance

The Instance parameter enables you to pass an entire object to the command to be processed. It is mainly used in scripts where an entire object must be passed to the command.

MaximumConflictInstances

Use the MaximumConflictInstances parameter to set the maximum number of conflicts allowed for recurring meetings. If the number of instances for a recurring meeting that are in conflict exceeds this number, the recurring meeting request will be declined.

MaximumDurationInMinutes

Use the MaximumDurationInMinutes parameter to specify the maximum duration allowed for incoming meeting requests.

OrganizerInfo

Set the OrganizerInfo parameter to $true to have resource mailboxes send organizer information when a meeting request is declined because of conflicts.

ProcessExternalMeetingMessages

Use the ProcessExternalMeetingMessages parameter to specify whether to process meeting requests originating outside the Exchange organization.

RemoveForwardedMeetingNotifications

If the RemoveForwardedMeetingNotifications parameter is set to $true, meeting forwarding notifications are moved to the Deleted Items folder after they are processed by the Calendar Attendant.

RemoveOldMeetingMessages

If the RemoveOldMeetingMessages parameter is set to $true, the Calendar Attendant removes old and redundant updates and responses.

RemovePrivateProperty

Set the RemovePrivateProperty parameter to $true to clear the private flag for incoming meeting requests.

RequestInPolicy

Use the RequestInPolicy parameter to specify a list of users who are allowed to submit in-policy meeting requests to the resource mailbox. All in-policy meeting requests from these users will be subject to approval by a resource mailbox delegate.

RequestOutOfPolicy

Use the RequestOutOfPolicy parameter to specify a list of users who are allowed to submit out-of-policy requests.

Out-of-policy requests are subject to approval by a resource mailbox delegate.

ResourceDelegates

Use the ResourceDelegates parameter to specify a list of users who are resource mailbox delegates. Resource mailbox delegates can approve or reject requests sent to this resource mailbox.

ScheduleOnlyDuringWorkHours

Use the ScheduleOnlyDuringWorkHours parameter to specify whether to allow meetings to be scheduled outside work hours.

TentativePendingApproval

 

Set the TentativePendingApproval parameter to $true to mark pending requests as tentative on the calendar. If set to $false, pending requests are marked as free.

 

That’s it guys. Have fun!

Friday, October 9, 2009

Exchange 2010 RTM’d

The Exchange Team announced today (http://msexchangeteam.com/archive/2009/10/08/452775.aspx that the Exchange 2010 code is now complete and will be generally available in early November.

Well done guys, Can’t wait to get my grubby little paws on it!

Friday, October 2, 2009

SCCM 2007 R2 installation and configuration on Windows 2008 SP2

Well this one was fun!
I hadn’t done a SCCM install for a while so I put my had up for an install at a small client site (100ish users).
This didn’t exactly go to plan…..to say the least.
I started off with Windows 2008 SP2 x64. The installation went without any major issues but after a reboot I the server threw out a heap of 32bit perfmon errors.
After doing a fair bit of research I ended up rebuilding the server with Windows 2008 x86.
To get SCCM installed and working on 2008 you really need to follow this Technet guide.
After this was done I configure my boundaries based on AD sites, configured my push settings and discovery method and some other  basic settings.
Now the test – I pushed out the client to a test machine.
Everything installed properly but in the configuration of the client on the test machine there was no site ID and it was not showing up in the console as having a client.
After about 6hrs of what felt like bashing my head against a wall and following and checking every single link Google threw at me I found this little gem http://social.technet.microsoft.com/Forums/en-US/configmgrsetup/thread/f9c24533-67b7-4281-ae5e-31c8f8f1da8d, and this one http://social.technet.microsoft.com/Forums/en-US/configmgrsetup/thread/6534f6ec-92a6-432b-b71b-e9e905aedaf4
While it didn’t actually have the answer to the issue. It did point me in the right direction.
I proceeded to extend the AD schema and set the site properties to update via AD and change the boundary to be IP subnet based.
I then went to bed (it was 4am at this stage). In the morning not only was the site ID in the test machine clients SCCM had been silently installing for the 3 or 4 hours I had left it for.
I was more than a little relieved when I saw this working as I really didn’t have it in me to fight with SCCM on 2 hours of sleep.