Exchange Server Share

… Information sharing on Exchange Server …

Posts Tagged ‘Script

Exchange 2007: Database Statistics in Powershell

Many times we need to find number of mailboxes in each database and the size of the database (EDB file) of all servers in an Exchange 2007 environment. With PowerShell, it is fairly simple to grab in a single line.

1.  How do we find number of mailboxes in each database?

On Screen: Get-MailboxDatabase | Select Server, StorageGroupName, Name, @{Name="Number Of Mailboxes";expression={(Get-Mailbox -Database $_.Identity | Measure-Object).Count}} | Format-Table -AutoSize

Export to CSV: Get-MailboxDatabase | Select Server, StorageGroupName, Name, @{Name="Number Of Mailboxes";expression={(Get-Mailbox -Database $_.Identity | Measure-Object).Count}} | Export-Csv C:\ServerStat-1.csv

2.  How do we find number of mailboxes and size of EDB file for each Database?

On Screen: Get-MailboxDatabase | Select Server, StorageGroupName, Name, @{Name="Size (GB)";Expression={$objitem = (Get-MailboxDatabase $_.Identity); $path = "`\`\" + $objitem.server + "`\" + $objItem.EdbFilePath.DriveName.Remove(1).ToString() + "$"+ $objItem.EdbFilePath.PathName.Remove(0,2); $size = ((Get-ChildItem $path).length)/1048576KB; [math]::round($size, 2)}}, @{Name="Size (MB)";Expression={$objitem = (Get-MailboxDatabase $_.Identity); $path = "`\`\" + $objitem.server + "`\" + $objItem.EdbFilePath.DriveName.Remove(1).ToString() + "$"+ $objItem.EdbFilePath.PathName.Remove(0,2); $size = ((Get-ChildItem $path).length)/1024KB; [math]::round($size, 2)}}, @{Name="No. Of Mbx";expression={(Get-Mailbox -Database $_.Identity | Measure-Object).Count}} | Format-table -AutoSize

Export to CSV: Get-MailboxDatabase | Select Server, StorageGroupName, Name, @{Name="Size (GB)";Expression={$objitem = (Get-MailboxDatabase $_.Identity); $path = "`\`\" + $objitem.server + "`\" + $objItem.EdbFilePath.DriveName.Remove(1).ToString() + "$"+ $objItem.EdbFilePath.PathName.Remove(0,2); $size = ((Get-ChildItem $path).length)/1048576KB; [math]::round($size, 2)}}, @{Name="Size (MB)";Expression={$objitem = (Get-MailboxDatabase $_.Identity); $path = "`\`\" + $objitem.server + "`\" + $objItem.EdbFilePath.DriveName.Remove(1).ToString() + "$"+ $objItem.EdbFilePath.PathName.Remove(0,2); $size = ((Get-ChildItem $path).length)/1024KB; [math]::round($size, 2)}}, @{Name="No. Of Mbx";expression={(Get-Mailbox -Database $_.Identity | Measure-Object).Count}} | Export-CSV C:\ServerStat-2.csv

Written by Amit Tank

July 27, 2009 at 11:05 pm

Exchange Update Rollup Installation. It is not Nightmare!!!

Many people feel that installation of Exchange Update Rollup is a nightmare, does it really? Well, It doesn’t, if you take certain steps of prevention.

Here are some of the myths which prevents from getting sleepless night for Update Rollups installation.

Known Issues & Pre Installation Checklist


1. Previous Interim Update (IU) Exists, Remove/Uninstall

Microsoft releases critical IUs for Exchange outside the Rollup schedule and can be obtained by contacting PSS. If you attempt to install the Rollup prior to removing the IU, you may get an error.

Prevention Step: Any installed IUs must be removed prior to applying a Rollup.

2. Permission Required

It is recommended to use the same account which was used to install Exchange server while installing Update Rollups.

If you have to use different account then make sure that you have highest permission like Exchange Organization Admin and a member of Local Admin group of Exchange server.

3. Do you have CAS-CAS Proxying deployed?

Apply the update rollup to the Internet-facing Client Access servers before you apply the update rollup to the non-Internet-facing Client Access servers.

4. Do you have Outlook Web Access customization?

When you apply an update rollup package, the update process will copy over the OWA files if it is necessary. If you have modified the Logon.aspx file or other OWA files, the customizations will be overwritten to ensure that OWA is updated correctly.

Prevention Step: Always make a backup copy of any customized Outlook Web Access files before you apply the update rollup.

After you apply the update rollup package, re-create Outlook Web Access customization in Logon.aspx.

5. Status of IPv6

Do you have IPv6 enabled in “Local Area Connection”? If you have IPv6 network and ticked/enabled in Local Area Connection, then it is fine.

But if you do NOT have IPv6 network and somehow unticked/disabled in Local Area Connection, follow below steps before Update Rollup installation.

  • Enable IPv6 in Local Area Connection.
  • Use Registry Editor and add registry key to completely disable IPv6 on a Windows Server 2008 computer as per KB952842

This may cause Exchange services to start or from changing ‘Startup Type’ (disabled to Automatic) after installation.

6. Lack of Internet Connectivity

You may experience long installation times and you may receive the following message:
“Creating Native images for .Net assemblies”

This issue occurs because the Exchange server issues network requests to connect to and look up the certificate revocation list at NGEN time for each assembly that it compiles to native code.

Because the Exchange server is not connected to the Internet, each request must wait to timeout before moving on.

Prevention Step: Turn off the Check for publisher’s certificate revocation option on the server that is being upgraded. Follow these steps:

In Windows Internet Explorer –> Tools –> Internet Options –> Advanced tab
In the Security section, uncheck or clear the box for below tow options

“Check for publisher’s certificate revocation”
“Check for server certificate revocation”

It is considered safe to clear this security option in Internet Explorer if the computer is in a tightly controlled environment. After the setup has completed, turn on the Check for publisher’s certificate revocation option again


Further information can be found here…
Exchange 2007 managed services might time out during certificate revocation checks

7. Managed code services may not start after you install this update rollup

This problem occurs because you do not have a Microsoft .NET Framework common language runtime (CLR) build that supports the generatePublisherEvidence configuration setting.

Prevention Step: If you are using the .NET Framework 2.0, install one of the following software updates:

.NET Framework 2.0 Service Pack 1
Problems that are fixed in the .NET Framework 2.0 Service Pack 1

Software update 936707 with CRL build 2.0.50727.876
FIX: A .NET Framework 2.0 managed application that has an Authenticode signature takes longer than usual to start

Software update 942027 with CRL build 2.0.50727.926
FIX: You may notice that the memory load is very high when you run an application that is built on the .NET Framework 2.0

Refrence: Exchange Server 2007 managed code services do not start after you install an update rollup for Exchange Server 2007

8. Exchange Best Practice Analyzer

Run ExBPA regularly to find any misconfiguration, problems or standard recommendation from Microsoft on your Exchange environment.

It is also recommended to run it before installation UR and correct the errors if shows in result.

Troubleshooting Update Rollup Installation Failure

Now what if UR installation failed, where to start looking for the cause or reason behind failure?

The Exchange Software Updates forum is available to get assistance if you come across with any update rollups installation issue. Microsoft engineers monitor the forum and assist you, but what they need to troubleshoot the issue? Information on your Exchange environment, how you are installing update rollup, and errors come up in various log files. These all things gives you and them hints to get resolution while troubleshooting.

Here are some of the logs to start investigation.

  1. Look into Event Log for any error related to UR installation.
  2. Enable Verbose MSI Logging to generate setup log and look into it for any error.
  3. ServiceControl.log available at C:\ExchangeSetupLogs.
  4. UpdateOwa.log available at C:\ExchangeSetupLogs.

1. Look into Event Log for any error

This is the starting place of forensic lab :), you may see some MSI related or any other errors which might have some numbers and with it setup would have failed.

Here is an example…

Event Type: Error
Event Source: MsiInstaller
Event Category: None
Event ID: 1024
Product: Microsoft Exchange Server – Update ‘Update Rollup 8 for Exchange Server 2007 Service Pack 1 (KB968012) 8.1.375.2’ could not be installed. Error code 1603.

Windows Installer can create logs to help troubleshoot issues with installing software packages. Use the following link for instructions on turning on logging support:

Error code 1603 is pretty generic in MSI installation and to look further deep we need to enable verbose MSI logging. Question comes, how? Ok, let’s discuss it in next portion.

2. Enable Verbose MSI Logging to generate setup log

We can enable MSI verbose logging to get extensive details of update rollup installation with below switches…

Exchange2007-KB<kb # of Rollup>-x64-EN.msp /lxv* c:\LogName.log

Let’s take an example of Exchange 2007 SP1 UR8 which was released sometimes back. I am executing it with below command.

Exchange2007-KB968012-x64-EN.msp /lxv* c:\SP1UR8.log


This will generate extensive log of UR installation and log an activity of each and every step.


You can open this log and check for errors which may shed some light on why the installation failure occurred. If you create a thread at Exchange Software Updates forum or log a call with Microsoft PSS, they will ask for this file anyway.

3. ServiceControl.log available at C:\ExchangeSetupLogs

This file keeps the log of service ‘Status’ and ‘Startup Type’ changes happened by ServiceControl.ps1 script during UR installation.

We may find the cause of service, if stopped or disabled during UR installation.


4. UpdateOwa.log available at C:\ExchangeSetupLogs

This file keeps the log of OWA changes performed by UpdateOWA.ps1 during UR installation.


Here is an example of UpdateOwa.log file generated during successful UR8 installation but we may find the cause here if OWA comes up with errors after UR installation.


We can also find UpdateOWA.PS1 script under Program Files\Microsoft\Exchange Server\Bin directory which can be run to correct OWA errors came after UR installation.


Written by Amit Tank

May 30, 2009 at 1:26 pm

Exchange 2010 Beta1: Bunch of FAQs, Tips & Known Issues

Exchange 2010 has many new features, advance administration methods, significant changes in Information Store to give better performance, new and simple high-availability approach and role based access control features for permissions. Sounds great so who doesn’t want to start testing this early version, Exchange 2010 Beta1.

As we know that Exchange 2010 product is still under development and being optimized, so here are certain FAQs, Tips and Known Issues which might help you to evaluate it easily and save your time while finding solutions or workarounds on some common queries and issues.


1. Production Use?

First question comes in your mind while testing Exchange 2010 Beta1 is, can I use Exchange 2010 Beta 1 in production?
~ Answer is "NO", here is an official article from Exchange Team on why you shouldn’t use Beta in production environment. 
Reference: "Can I install Exchange 2010 Beta in production?"

2. Windows 2008 Editions

~ Exchange 2010 can be installed on Windows 2008 & Windows 2008 R2 but wait…

2.1 Can I install Exchange 2010 on Windows 2008 Server Core?
~ No, Exchange 2010 can NOT be installed on Windows 2008 Server Core, it requires full edition of Windows 2008 Standard or Enterprise.
~ Reason is, Exchange requires some of the components which are not supported on Windows 2008 Server Core, example is .Net Framework.

2.2 Can I use Exchange 2010 Beta 1 with Windows 2008 R2?
~ Yes, you can use Windows 2008 R2 but read below couple of points.

2.2.1 Which build of Windows 2008 R2 I can use for Exchange 2010 testing?
Exchange 2010 Beta1 PowerShell & WinRM are incompatible with post 7000 build of Windows R2 and requires wire-level change so it can be installed only on build 7000 of R2 and not on later builds so keep in mind if you are planning to install it on R2.

2.2.2 You may get below error while accessing EMC on Windows 2008 R2.

Connecting to remote server failed with the following error message : The WinRM client received an HTTP server error status (500), but the remote service did not include any other information about the cause of the failure. It was running command ‘Discover-ExchangeServer -UseWIA $true’.

This is know issue and to solve it follow below two steps…
     ~ Disable “Anonymous Authentication” on PowerShell virtual directory of IIS.
     ~ Enable remote powershell for user with below cmdlet in “Exchange Management
        Shell (Local Powershell)”
        Set-User “User Name” -RemotePowerShellEnabled $true

3. Coexistence

Coexistence with legacy Exchange versions (2007or 2003) is NOT supported with Exchange 2010 Beta1. We may need to wait for next release of Exchange 2010.

4. Installation

4.1 Domain & Forest Functional Levels of your AD environment.

Exchange 2010 requires Domain and Forest (both) Functional Levels to at least Windows 2003. You can refer below articles to raise Functional Levels of your AD to Windows 2003.
References: Raise the Domain Functional Level 
                     Raise the Forest Functional Level

4.2 Setup fails at Hub Transport Server role installation with below error.

The execution of: “$error.Clear(); if ($RoleStartTransportService) { start-SetupService -ServiceName MSExchangeTransport }”, generated the following error: “Service ‘MSExchangeTransport’ failed to reach  status ‘Running’ on this server.”

~ This could be because you have disabled IPv6 in Local Area Connection. Correct method to disable IPv6 is with Registry Key and remove the entry from hosts file.
Refer below article.

Reference: Exchange 2010: Hub Transport Role Installation Fails

4.3 You get below error while running installation.

"An error occurred while copying file D:\Exchange2010-Beta1-x64\…\templates editor.msc"

~ Copy Setup dump to local hard drive and execute Exchange 2010 setup from there.
~ Make sure that account, being used to run Exchange 2010 setup, has Domain, Enterprise and Schema Admin rights.

4.4 You may get below error while installing additional Mailbox Server in Exchange 2010 Beta1 environment.

"Object reference not set to an instance of an object"

~ This might be due to "Admin Audit Log Agent" Cmdlet Extension Agents enabled in your environment. This will be resolved in later builds but current Workaround for this problem is disable Admin Audit Log Agent with below cmdlet.
          Disable-CmdletExtensionAgent "Admin Audit Log Agent"
Understanding Cmdlet Extension Agents
Disable a Cmdlet Extension Agent

5. Exchange Management Console / Shell Tips

5.1 When you try to access EMS/EMC with newly created administrator account, you get below error.

Connecting to remote server failed with the following error message : Access is denied.
At C:\Program Files\Microsoft\Exchange Server\V14\bin\ConnectFunctions.ps1:154 char:28
+         $global:r = new-pssession <<<<  -connectionURI
https://$fqdn/powershell -ConfigurationName Microsoft.Exchange -Authentication NegotiateWithImplicitCredential -SessionOption $sessionOption #-erroraction  silentlycontinue
    + CategoryInfo          : OpenError: (System.Manageme….RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportException
    + FullyQualifiedErrorId : RemoteRunspaceOpenFailed


Connecting to remote server failed with the following error message: Access is denied. It was running command ‘Discover-ExchangeServer -UseWIA $true’

You need to enable Remote Powershell for newly created Admin account with below cmdlet.
          Set-User “User Name” -RemotePowerShellEnabled $true

5.2 When you click on CAS Server properties you may get below error.

Microsoft Exchange
Unable to create IIS (Internet Information Service) directory entry. Error Message is: Access is denied.
. HResult = -2147024891 It was running command ‘get-ActiveSyncVirtualDirectory’.

This is know issue with current Beta1 and you need to add "Microsoft Exchange Security Groups\ Exchange Trusted Subsystem" group to Local Administrators group on all Exchange servers and Restart the CAS server.

5.3 If you create User with ADU&C and enable mailbox with EMC/EMS, now while removing the same mailbox in EMC you get below error.

Active Directory operation failed on This error is not retriable. Additional information: Access is denied.
Active directory response: 00000005: SecErr: DSID-03151D12, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0

Solution: You need to use EMS to remove the mailbox with Remove-Mailbox cmdlet.

5.4 How to manage mailbox folder permission with EMS.

This is one of the New Mailbox and Recipient Functionality in Exchange 2010. Let’s take an example here, if you want permission on a folder named "SharedFolder1" of  User1’s mailbox to User2 in Exchange Management Shell.

~ You can use Add-MailboxFolderPermission cmdlet. But what is the format of folder name which we should pass in cmdlet to give permission? So, format should be blow.

Add-MailboxFolderPermission -Identity User1:\SharedFolder1 -AccessRights Editor -User User2

6. Mailbox Access & Client Issues

6.1 How can I access Exchange 2010 mailbox?
~ You can access mailbox with MAPI clients like Outlook 2007 or 2003, OWA premium experience with IE, FireFox & Safari browser or Windows Mobile 5.0, 6.0 devices.

6.2 Outlook 2007 is not able to access mailbox and/or unable to start "MSExchange Rpc Client Access" Service.
This is know issue and it will be corrected in later build. Workaround is to add below two registry keys on Exchange 2010 Server.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ MSExchangeIS\ParametersSystem]
"Mapi Rpc Endpoint Registration"=dword:00000002
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ MSExchangeRPC\ParametersSystem]

6.3 Outlook 2003 is unable to access mailbox.
RPC/MAPI Mailbox access with Outlook 2003 may not work while testing in Beta1, you need to use Outlook 2007 to gain mailbox access. You may use RPC/HTTPs method with Outlook 2003 to access Mailbox.

7. Public Folders Access & Client Issues

7.1 Public Folder Support in Exchange 2010

Public Folder is fully supported in Exchange 2010 life cycle as Exchange team is already announced earlier.
Reference: Updated Exchange Public Folder Guidance
But you need to start looking for other alternative if PFs are being heavily used in your organization, Share Point is a good alternative from that stand point.

7.2 Where is Public Folder option in OWA?

Public Folder, Notes, Tasks, Views etc… modules are not included in current Beta, these will be available in later builds.

7.3 Unable to access Public Folder in Outlook 2007 and you get below error.

"Cannot expand the folder. The set of folders cannot be opened. Your profile is not configured"

Public Folder access has problem with MAPI/RPC Outlook 2007 profile and can not be accessible, this will be corrected in later build.

8. Outlook Web Access

8.1 Certain features (like drag and drop items) are not yet fully implemented in this version of Beta to work on Firefox and Safari web browser so you can still find some gaps and which will be covered by RTM.

8.2 OWA, where is integrated IM and Presence functionality?
~ IM & Presence functionality is not yet included into Beta1 so we may need to wait for next build releases.
~ However You need to have Office Communications Server 2007 R2 installed in your environment to have basic IM functionality then you can configure an integration between OCS and Exchange OWA to connect together and give you status indication (presence information) of other persons, have chat with them etc…

8.3 OWA gives blank display with below in address bar
You may need to reinstall CAS server role and IIS.

9. Exchange Control Panel (ECP)

9.1 When you click on Options in OWA to login on ECP, again it asks for authentication.
~ This is expected behaviour in Beta1 because ECP virtual directory doesn’t support FBA yet. This will be corrected by RTM releases of Exchange 2010.

9.2 Authentication fails when you click on Options button in OWA and you get below error.

Unexpected Error – An error occurred and your request couldn’t be completed. Please try again.

~ This happens if you are accessing OWA with FQDN of your OWA address like but didn’t set urls on virtual directories.
~ You need to set InternalURL to https://FQDNofExchange/OWA and ExternalURL to of OWA virtual directory with Set-OWAVirtualDirectory cmdlet.

Set-OWAVirtualDirectory “Owa (Default Web Site)” –InternalURL “https://FQDNofExchange/owa” –ExternalURL “”

~ Similarly for ECP directory with Set-ECPVirtualDirectory cmdlet. Once these are configured it prompts for passwords (Refer #9.1) and authentication redirects to ECP.

Set-ECPVirtualDirectory “Ecp (Default Web Site)” –InternalURL “https://FQDNofExchange/ECP” –ExternalURL “”

10. Archive or Alternate Mailbox

10.1 How to create Archive Mailbox?
You can use below cmdlet to create archive mailbox. In later builds you can create archive mailbox in EMC too.

New-AlternateMailbox -Name User-Archive -Mailbox UserName -Type Archive
Reference: New-AlternateMailbox

10.2 Where will be Archiving mailbox created?
~ Archive mailbox will be created automatically on the same mailbox database where primary mailbox of user is available.

10.3 Does discoveries feature work on Archive mailbox to find emails by Compliance Officer?
Yes, Compliance Officer can search emails from Archive Mailbox. Exchange Control Panel (ECP) is an interface for Discovery feature of Exchange 2010.

10.4 How to access Archive Mailbox?
It can be accessed via OWA or Outlook 2010 but unfortunately OWA doesn’t have that feature included in current Beta1 to access Archive Mailbox and beta version of Outlook 2010 will be released in Q3 so we may need to wait until next build of Exchange 2010 available.

11. MailTips

11.1 What are supported clients for MailTips feature?
~ MailTips are supported in OWA and Outlook 2010.
~ But current Exchange 2010 public beta doesn’t have this feature module ported in OWA and Outlook 2010 Beta has not released yet so we may need to wait for next releases of Exchange 2010…
Reference: Introducing MailTips

12. High Availability & Recovery

12.1 Database Availability Groups (DAG)

12.1.1 You get below error while adding a server into DAG by using EMC.

Insufficient permissions to view the network shares on machines <FileShareWitness>. Error code 5.

~ This is known issue, remote powershell can add a server in DAG since it requires to install Windows Failover Cluster (WFC) components which are not accessible through remote powershell.
~ Use "Exchange Management Shell (Local Powershell)" to add the server into DAG with Add-DatabaseAvailabilityGroupServer cmdlet.

Add-DatabaseAvailabilityGroupServer -Identity DAG1 -MailboxServer E2010SRV1

Reference: Add-DatabaseAvailabilityGroupServer

12.2 What is the alternative of Recovery Storage Group (RSG)?

~ As we know that there Storage Group concept is deprecated and we have only Databases so now we can use Recovery Databases for recovery purpose.
~ Here are cmdlets to create Recovery Database and to restore mailbox.
New-MailboxDatabase -Recovery <DatabaseIdParameter> –Server <StoreMailboxIdParameter>
Restore-Mailbox -Identity <MailboxIdParameter> -RecoveryDatabase <DatabaseIdParameter> -RecoveryMailbox <StoreMailboxIdParameter>



Hope this article helps you to test Exchange 2010 Beta1 with greater comfortably and yeh, most of these know issues will be corrected in later builds or by RTM release…

Written by Amit Tank

May 3, 2009 at 10:24 am

PowerShell: Export Multivalued Properties

You would have seen that, when we try to export multivalued property to CSV file with Export-CSV command, it just copies Definition instead of all the values of that multivalued property.

Let’s take couple of examples…

Example 1: Export Blocked Recipients from the Recipient Filtering configuration.

When we export Blocked Recipients with below command, it exports Definition of the BlockedRecipients property instead of all the values because it is a multivalued property.

Get-RecipientFilterConfig | Select Name, BlockedREcipients | Export-CSV BlockedRecipient.csv




We need to join all the values of multivalued property with Join function before exporting it.

So our final command to export all the values of BlockedRecipients multivalued property is below.

Get-RecipientFilterConfig | Select Name, @{Name=’BlockedRecipients’;Expression={[string]::join(";", ($_.BlockedREcipients))}} | Export-CSV BlockedRecipient.csv 



Example 2: Export all the email addresses of a user.

When we export the EmailAddresses property with below command, it just exports Definition.

Get-Mailbox "Tank, Amit M" | Select Name, EmailAddresses | Export-CSV EmailAddress.csv


So we need to join all the email addresses before exporting to CSV file and our final command is below.

Get-Mailbox "Tank, Amit M" | Select Name, @{Name=’EmailAddresses’;Expression={[string]::join(";", ($_.EmailAddresses))}} | Export-CSV EmailAddress.csv


This would be even more helpful when we want to export a multivalued property for bulk of users, like when we export email addresses of all the users of an Exchange environment with below command.

Get-Mailbox | Select Name, @{Name=’EmailAddresses’;Expression={[string]::join(";", ($_.EmailAddresses))}} | Export-CSV EmailAddress.csv

Written by Amit Tank

December 10, 2008 at 3:31 pm