Sunday, January 31, 2010

Exchange 2010 OWA errors in Exchange Management Console

After the installation of Exchange 2010 if you navigate to Server Configuration->Client Access Server.
You may get the following error:
“An IIS Directory entry couldn’t be created. The error message is Access is denied.
.HResult= –2147024891 it was running the command Get-OwaVirtualDirectory”.
Concordia issue
This is resolved by adding the Exchange Trusted Subsystem group to the local Administrator group on the Exchange 2007 server.

Exchange 2010 from Installation to Migrating Mailboxes Pt.1

Apologies for not having posted for quiet some time but I have been transitioning a new client into the company that I work for’s managed service offering.
Documenting and auditing an infrastructure of 100 odd physical server ranging in age from 3-6 years covering 12 locations and 2 AD forests took a little bit of my time for a couple of months.
So now that is over I am back to my regular job and on to my first few Exchange 2010 migrations.
I am going to run you through how to get Exchange 2010 installed in your environment and migrate your mailboxes from an Exchange 2007 server to an Exchange 2010 environment today. Please note this will not cover DAG’s (Database Availability Groups) I will be covering that is great detail in a future post.
So lets get started.
On the source server we need to make sure the following prerequisites are completed before installing Exchange 2010 into the environment.
1) Exchange 2007 SP2 must be installed on source server.
If you have more than 1 Exchange 2007 server you must have SP2 installed on all CAS servers in Organisation and installed on all Exchange 2007 servers in the same AD site as the one that you are planning on placing your Exchange 2010 server.
2)  Other than all the current Windows Updates, you need to install Windows Installer 4.5 (found here)
If installing Exchange 2010 on Windows 2008 you also need to install SP2 and the following
  1. Install Microsoft .NET Framework 3.5 Service Pack 1 (SP1). For details, see Microsoft .NET Framework 3.5 SP1.
  2. Install the Microsoft .NET Framework 3.5 Family Update for Windows Vista x64, and Windows Server 2008 x64 updates. For details, see Microsoft .NET Framework 3.5 Family Update for Windows Vista x64, and Windows Server 2008 x64. See also Microsoft Knowledge Base article 959209, An update for the .NET Framework 3.5 Service Pack 1 is available.
  3. Install Windows Remote Management (WinRM) 2.0 and Windows PowerShell V2 (Windows6.0-KB968930.msu). For details, see Windows Management Framework.
  4. On servers that will host the Hub Transport or Mailbox server role, install the Microsoft Filter Pack. For details, see 2007 Office System Converter: Microsoft Filter Pack.
To install all the OS pre-requisites follow the technet guide here. Just a note: when using the built in Exchange XML files for Server Manager you need to add the path to the files; so your command will look something like this
sc config NetTcpPortSharing start= auto
ServerManagerCmd -ip z:\scripts\Exchange-Typical.xml –Restart

Where Z is the location of the source files.

After all the OS pre-requisites are done installing and the server has finished its reboot. you can either proceed with the GUI install or the command line install.

My personal preference is to use the command line.
So from the command prompt (it will need to be run as Administrator)
Start with the AD modifications

setup.com /preparead

After this completes you will need to actually install Exchange.

For a server holding CAS, Mailbox and Hub Transport roles issue the following command

setup.com /m:Install /r:M,H,C

If you have update rollups and wish to incorporate that into your installation and the following switch

/UpdatesDir:“c:\ExchangeUpdates“

The contents of the update folder must be a .msp or update.exe.

The GUI installation is pretty much a next, next finish affair with the one exception of being asked if the CAS role will be Internet facing and if so what the external address will be.

If you are installing Exchange 2010 into an environment comprised of Exchange 2003 you will need to specify the server that you wish to create a Routing Group connector with.

On the Exchange 2003 server if you use a smart host for outbound mail make sure that the smart host  is set on the SMTP connector NOT the Default SMTP Virtual Server as this will cause mail flow problems.


That wraps it up for this part.


I’ll go through moving mailboxes next

Thursday, January 28, 2010

Exchange 2010 EAS problems

Well after bashing my head against the wall for the last 2 hours or so I have found a solution to my issue.
In Exchange 2010 after migrating from Exchange 2007 (not sure about 2003 haven’t had the issue with a 03->10 migration yet) you may get the following error when trying to use ActiveSync : -

ActiveSync registered a problem on the server.
Support code: 0×85010014
The Exchange Connectivity Analyser will state that there is a HTTP 500 error
The solution to this is that any users that wish to use ActiveSync need to have inheritance turned on on their AD user object.
image
Now if setting this on one user is OK but to do it to a lot (I have about 2200 AD objects and they think it is around 90 ActiveSync user) use ADModify (www.codeplex.com/admodify)
clip_image004
After doing this all phones synced again, although they did do a complete re-sync so just bear that in mind

Wednesday, November 11, 2009

Exchange 2010 released worldwide

The Exchange Team has announced that Exchange 2010 is now available world wide and is also now available as a trial download

http://msexchangeteam.com/archive/2009/11/09/453096.aspx

http://technet.microsoft.com/en-au/evalcenter/dd185495.aspx

Go get some!

I’ll be starting some Exchange 2010 how-to’s when work settles down a little and I have some spare time in the evening.

Technorati Tags:

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.