• How To Check Exchange Rollup Version

    Back with the first few releases of Exchange, product updates were made available via service packs.  This continued into the Exchange 2000 and Exchange 2003 days.  It seems like an eternity ago, and dinosaurs were still roaming the Earth, when Exchange 2003 SP2 was released in October of 2005 as a whopping 109 MB download.

    Exchange 2007 moved to a different servicing strategy which added a predictive scheduling element to the underlying Service Pack cycle so customers had a vehicle to receive fixes faster than wait for the next service pack.  Exchange 2010 does the same.  These updates that we speak of are the Update Rollups, Rollups, URs or RUs.

    One issue with this though is that Exchange 2007/2010 tools show the currently installed Service Pack version, as they did in Exchange 2003, and not what RU is currently installed.  So when you look at the below screenshot of an Exchange 2010 organisation you can see that it is running SP2 as the build is 14.2 but you cannot state what RU is currently installed.  If service pack 3 was installed then the build would start with14.3.

    Exchange 2010 Build Information In EMS

    And the same information is mirrored in the GUI:

    Exchange 2010 Build Information In Exchange Management Console

    How can we find out what RU is currently installed?

    The simplest way we can check it to look for installed updates in Add/Remove programs (or whatever it’s called nowadays)

    Exchange 2010 Rollup Updates Shown In Add/Remove Programmes

    Or by going help –> About in the Exchange Management Console.

    Exchange 2010 Help About Build Information

    Note that the Help –> About method does not give you a text based description of the installed RU, and a link to the relevant KB article.  We need to use the techniques described below to map the build information to the released products.

    Well, that’s ok but you can do better…

    Tom Kern originally addressed this back in 2010 with his post to the Exchange team blog.  As with Exchange 2003 checking the version of key files is a great way to determine the current build of Exchange.  As an added bonus this can be automated and scripted.  Party on Wayne!

    In its simplest form Tom demonstrates how to check the version of Exsetup.exe locally on a server:

    GCM Exsetup.exe | % {$_.FileVersionInfo}

    Expanding this out, '”GCM”  is an alias of Get-Command and “%” is an alias to ForEach-Object,  which then retrieves the FileVersionInfo attribute of the file passed down the pipeline which is Exsetup.exe.  So this could be written out fully as follows:

    Get-Command Exsetup.exe | ForEach-Object {$_.FileVersionInfo}

            

    To prove they are aliases run Get-Alias GCM  and review the output. You also may be thinking about the location of Exsetup.exe and why this is not specified in the above command.  This is because Exchange setup adds the Exchange \bin folder to the path environment variable.  To check this out in PowerShell we can use:

    Get-Item ENV:Path | FL

    Taking a sidebar, we can use the same technique to show the version information of all the .exe files in the C:\Windows folder:

    Dir C:\Windows *.exe | GCM | % {$_.FileVersionInfo} | FT -AutoSize

    As Tom mentions, you then correlate the exsetup.exe version number you find with those listed in Exchange Server 2007: Platforms, Editions, and Versions, Build numbers and release dates for Exchange Server or on the actual rollup update download pages.   The content in that KB is a little stale, and chances are you want to take a look at Exchange Server and Update Rollups Build Numbers on the TechNet Wiki.

    So looking at the Exsetup.exe version on a lab server:

    Checking Exchange 2010 RU Version

    We can see that version 14.2.309.2 is Exchange 2010 SP2 RU3.

     

    Well, that’s better but I want more

    We can now get a local server’s build, but what about remote machines and checking the entire organisation?  Scripting to the rescue!  As with most things scripting there are a few different ways to achieve the same result.  Bhargav has a script on his blog to determine the build version information using remote registry and also Get-Content.

    As an alternative, if you have WinRM Remoting enabled you can then use the Invoke-Command cmdlet to remotely access servers if they have the necessary build of WinRM, PowerShell and .Net Framework. Exchange 2010 servers already have the necessary components installed as the underlying prerequisites to install Exchange 2010 include NET Framework 3.51, PowerShell 2.0 and Windows Remote Management (WinRM) 2.0.  These prerequisites can be installed easily by Exchange 2010 setup, using a feature introduced by Exchange 2010 SP1.

    Sample code to illustrate getting the Exchange version using PowerShell remoting:

    Update 5-11-2013:  Updated ForEach loop

    $ExchangeServers = Get-ExchangeServer  | Sort-Object Name

    ForEach  ($Server in $ExchangeServers)
    {

    Invoke-Command -ComputerName $Server.Name -ScriptBlock {Get-Command  Exsetup.exe | ForEach-Object {$_.FileversionInfo}}

    }

    Note that the Invoke-Command is a single line that may be displayed on multiple lines due to word wrapping.

    One other thing that is good to discuss is a detail around ForEach  and ForEach-Object.  Be sure to avoid confusing the ForEach keyword with the ForEach-Object cmdlet.   If that is done then the above code will fail to run and you will get this error:

    Unexpected token 'in' in expression or statement

    Back to Powershell remoting now!

    Note that it did say *IF* you have WinRM Remoting enabled above.  If this is not the case then you will likely see this lovely error which will no doubt brighten up your day!

    Connecting to remote server failed with the following error message : The WinRM client cannot complete   the operation within the time specified. Check if the machine name is valid and is reachable over the network and fire wall exception for Windows Remote Management service is enabled. For more information, see the about_Remote_Troubleshooting Help topic.
        + CategoryInfo          : OpenError: (:) [], PSRemotingTransportException
        + FullyQualifiedErrorId : PSSessionStateBroken

             

    To quickly check to see the configuration of WinRM:

    Winrm enumerate winrm/config/listener

    If enabled you should see something similar to this:


    Listener
        Address = *
        Transport = HTTP
        Port = 5985
        Hostname
        Enabled = true
        URLPrefix = wsman
        CertificateThumbprint
        ListeningOn = 10.0.2.11, 127.0.0.1, 169.254.1.65, 192.168.2.11, ::1

    If there is currently no listener, then use Enable-PSRemoting  or  the winrm quickconfig command.

    Enabling PowerShell Remoting Using Enable-PSRemoting

    Note that in WinRM 2.0 and newer the listener is created on port 5985 TCP for HTTP and HTTPS is port 5986 TCP.  To Configure WINRM for HTTPS the winrm command can changed to:

    winrm quickconfig -transport:https

    To configure a HTTPS listener via PowerShell, specify the –UseSSL parameter on the Set-WSManQuickConfig cmdlet.

         

    For more fun and games that you can have with PowerShell remoting, please see:

    Running Remote Commands

    about_Remote_Requirements 

    Well, that’s great but I want it all

    Chances are that you don’t fancy logging on to each server and running Enable-PSRemoting.  If that does excite you, then you need help!  For the others who want to save time and ensure a consistent management strategy is applied to all of their servers then we can enable and configure PowerShell remoting using Group Policy.

    Leaving on a happy thought, this issue is resolved in Exchange 2013.  When Cumulative Updates (CUs) are installed on an Exchange 2013 server the version information displayed will be updated to reflect the update.

    The Exchange 2013 build numbers are also documented on the TechNet wiki.

    Exchange 2013 Cumulative Update Version Shown In Management Tools

    Cheers,

    Rhoderick

    >>>

  • Windows Server 2012 R2 Hyper-V Architecture Poster

    A picture says a thousand words.   This is one of the reasons that the various architecture posters are so popular as they provide an easy way to visualise the Hyper-V stack.

    Updated posters are now available for Windows Server 2012 R2 Hyper-V.  In addition to the architecture poster, there are other smaller bite sized posters on the below topics:

    • Generation 2 Virtual Machines
    • Hyper-V and Failover Clustering
    • Hyper-V Storage
    • Hyper-V Virtual Hard Disk Sharing
    • Live Migration
    • Session Modes
    • Upgrading Your Private Cloud

    Since a lot of traffic is now from mobile and tablet devices which do not have high end graphic processing, I’ve created deep zoom versions of the posters to improve reading on those devices.  Deep Zoom Control Panel - Look For It At Bottom Right Of Each ZoomUse the panel in the bottom right hand corner of each poster below to enter & leave full screen and to zoom in and out.

    Hyper-V 2012 R2 Architecture Poster

    The poster can be downloaded from this direct link.

    Generation 2 Virtual Machines

    The poster can be downloaded from this direct link.

    Hyper-V and Failover Clustering

    The poster can be downloaded from this direct link.

    Hyper-V Storage

    The poster can be downloaded from this direct link.

    Hyper-V Virtual Hard Disk Sharing

    The poster can be downloaded from this direct link.

    Live Migration

    The poster can be downloaded from this direct link.

    Session Modes

    The poster can be downloaded from this direct link.

    Upgrading Your Private Cloud

    The poster can be downloaded from this direct link.

    >>

    Previous posters are listed here for reference:

    Windows Server 2012 Hyper-V

    Windows Server 2008 R2 SP1 Hyper-V

    Windows Server 2008 R2 Hyper-V

    Windows Server 2008 Hyper-V

    >>

    Cheers,

    Rhoderick

    >>

    Technorati Tags: ,
  • Windows Hyper-V 2012 & 8.1 Hyper-V Did Not Find Virtual Machine to Import

    Back in May 2013, we discussed an issue which caused the Hyper-V Did Not Find Virtual Machines To Import error.  Well, as mentioned in that blog post there are a few reasons for this error message being displayed and it does depend on the versions of Hyper-V in use.

    There were some comments posted (thanks again for that by the way!) which mentioned an issue with importing VMs into Windows Server 2012 R2 and Windows 8.1.  I thought it may be worth bubbling this up again now that Windows 8.1 is available and people may be running into the same import issue.  Ideally we can raise awareness so that we can plan the right approach.

    The issue is that VMs which were previously exported from Windows Server 2008 or Windows Server 2008 R2 Hyper-V cannot be imported into Windows Server 2012 R2 Hyper-V and Windows 8.1.   Please note that the same  VMs could be imported into Windows Server 2012 Hyper-V  (note the missing R2 there) without any issue.

    Update 2-12-2013: Added new post to walk through the conversion process using Server 2012.

    Let’s take a peek at the issue, and then discuss what we can do!

    Importing Windows 2008 R2 Hyper-V VM Into Windows 8.1

    For the purposes of this post, let’s try and import a VM called AD1HC1.  This was successfully exported from Windows Server 2008 R2 Hyper-V.  Currently this VM and all its associated files reside in the G:\VMs\AD1HC1 folder.  The various files can be seen here:

    Windows Server 2008 / 2008 R2 Exported Virtual Machine Directory Structure

    There are no hidden tricks and this is an exported VM that can be imported to Windows Server 2008 R2 without issues, and has been many times.

    If we use the GUI and try to import the VM into Windows 8.1

    Importing a Virtual Machine From Windows 2008 R2 Hyper-V Into Windows 8.1

    We get the following error:

    Hyper-V did not find virtual machines to import from location ‘G:\VMs\AD1HC1’

    Importing a Virtual Machine From Windows 2008 R2 Hyper-V Into Windows 8.1 - Hyper-V did not find virtual machine to import

    When reviewing what Process Monitor sees on the file system, there are no Access Denied error messages.  We are able to read the disk and review the files contained within.

    Importing a Virtual Machine From Windows 2008 R2 Hyper-V Into Windows 8.1 - Process Monitor Analysis

         

    If the files exist on the disk and we can read them, what’s up then?  For the eagle eyed out there, you may be wondering why the .exp file has not been read…..

    Digging In

    If you wrote scripts to import/export Windows Server 2008 Hyper-V VMs, there is a small clue in the Hyper-V section located in the Features Removed or Deprecated in Windows Server 2012 page on TechNet.   **

    • VM Chimney (also called TCP Offload) has been removed. The TCP chimney will not be available to guest operating systems.
    • Support for Static VMQ has been removed. Drivers using NDIS 6.3 will automatically access Dynamic VMQ capabilities that are new in Windows Server 2012.

    • The WMI root\virtualization namespace is deprecated. The new namespace is root\virtualization\v2.
    • Windows Authorization Manager (AzMan) is deprecated. You may need to use new management tools for virtual machines or redesign the authorization model.

    And if we then look at the same section in the Features Removed or Deprecated in Windows Server 2012 R2

    • WMI root\virtualization namespace v1 (used in Hyper-V)

    So the WMI v1 namespace was deprecated in Windows Server 2012, and then removed in Windows Server 2012 R2.   Why is this important?  When the Export call was made to export the VM from Windows 2008 R2, the WMI v1 namespace was used.  This can be seen with a PowerShell snippet  which binds to the Hyper-V WMI Namespace.

    $VMManagementService = Get-WmiObject -Namespace root\virtualization -Class Msvm_VirtualSystemManagementService -ComputerName $HyperVHost

    In a post on the Hyper-V TechNet forum there are some details worth reading from Taylor Brown, and if you don't already read his blog the RSS feed is here.

    VM's that are exported from Windows Server 2008 or 2008 R2 utilized the version 1 WMI namespace which resulted in an .exp file to represent the exported virtual machine. In Windows Server 2012 we introduced a new WMI namespace (version 2 or root\virtualization\v2) which implemented a much better import/export model – allowing you to effectively just copy the virtual machine folder (with the VM’s XML configuration file inside it) as well as the VM’s VHDs and then import that directly. For Windows Server 2012 we maintained the version 1 WMI namespace which allowed for importing of Windows Server 2008/R2 VM’s on 2012.

    In Windows Server 2012 R2 we have removed the old version 1 namespace which means we can’t import virtual machines that where exported from Windows Server 2008/R2.

    What To Do

    As you can see, VMs that were exported from Windows Server 2008 & 2008 R2 cannot be imported as-is into Windows Server 2012 R2 or Windows 8.1.

    Don’t Panic Captain Mainwaring, Don’t panic!   ***

    Don’t panic as there are options!!  Let’s look at them based on the scenario.  There are two basic takes on this:

    1. Original Hyper-V Server and the VM is still available
    2. Original Hyper-V Server is not available

    Original Hyper-V Server & VMs Available

    If you exported from Windows Server 2008 or 2008 R2, and the original host is still available with the VMs then probably the easiest option will be to get the VMs off that machine in a format that is easily importable to Hyper-V 2012 R2.

    On the original Hyper-V server, power down the VMs.  Once they have shut down, then stop the Hyper-V Virtual Machine Management Service (VMMS).  This will unlock the VM’s files.  Simply copy over the VM folders to the Windows Server 2012 R2 server and they can be imported.  Remember this was one of the features added to Windows Server 2012 - we do not have to specifically export a VM before it can be imported.  Funnily enough this functionality was added in the WMI v2 namespace for Hyper-V….

    Original Hyper-V Server Unavailable

    If the original server or a copy of the VMs is no longer available, there are still a couple of options.  This may be the scenario if you are re-purposing the hardware and the original machine has been wiped, or if these are archived lab VMs that you are trying to import to a new version of Hyper-V.

     

    Perform Intermediate Import

    If, and this will not apply to everyone, you have a Windows Server 2012 Hyper-V machine, the 2008 / 2008 R2 VMs can be imported to that server.  Note that this is not a R2 2012 server. Since 2012 still has the WMI v1 namespace (albeit deprecated), we can import the .exp machines.  Once successfully imported to 2012, the VMs can be exported or copied over to Windows Server 2012 R2.  You do not need to power on the VMs after importing them to the intermediate Windows Server 2012 machine, that server is only used to perform the import thus allowing the VM to be copied to Windows Server 2012 R2.

    Travis mentioned an interesting take on this in the comments below.  Consider a temporary boot to VHD option just to get the necessary import step done.  Thanks Travis!  Would love to know if that helps folks out at all – please post a comment below!

    Update 2-12-2013: Added a How To on this topic.  Please see this post.

     

    Create New VM – Reuse Virtual Hard Disk

    If the above method is not available, or is too time consuming, an option is to create new VM configuration and specify to use an existing virtual hard disk.  By doing so we can re-use the VM’s virtual hard disk file.  Since the virtual NIC now has a different GUID Windows will recognise it as a different NIC, and you will need to re-enter the IP address in the VM.

    Cheers,

    Rhoderick

     

    ** – What is the etymology of the word deprecated? – and Wikipedia doesn’t count!  Personally I prefer depreciate since the original Latin dēprecātus was to pray.

    *** – If you have not seen the classic BBC comedy Dad’s Army take a look!

    >>>

  • Save The Date - End of Exchange 2003 Support–T Minus 6 Months

    Exchange 2003 Support About To Blast OffAs mentioned 6 months ago, Exchange 2003 is rapidly approaching the end of its extended product lifecycle.  The ship is getting ready to launch, and hopefully this should not surprise anyone.

     

    Exchange 2003 certainly has had a good run over the last 10 years since it was released back in back in October 2003.  It made ActiveSync available to the mainstream (Mobile Information Server was not required), implemented anti-spam measures and also introduced RPC/HTTPS which was later renamed to be Outlook Anywhere.  Do you still remember the "fun" of manually configuring the OA settings, prior to SP1, manually in the registry?

     

    Exchange had certainly reached a point during the Exchange 2003 lifecycle which meant radical changes were required to let Exchange grow and overcome certain limitations.  Moving to x64 based architecture allowed Exchange to leverage more memory and move beyond the painful limitation of only being able to work with 4GB of memory.  PowerShell simplified the administrator's life compared to writing vbscript, and the Exchange System Manager with options buried at numerous levels was also replaced.

     

    While we can now look back on those halcyon days, it’s almost time to say goodbye to this old friend....

     

    Six months from today, Exchange 2003 will reach the end of it's extended support window.  Additionally other products will also cease to be supported on the same date.  Please make sure that the 8th of April 2014 is in your calendar!

    Outlook 2003    will transition out of extended support on 8th of April 2014

    Exchange Server 2003 will transition out of extended support on 8th of April 2014

    Windows XP    will transition out of extended support on 8th of April 2014

    Exchange 2010 SP2   will transition out of support on 8th April 2014

     

    And as a non Exchange specific item, please also note Windows 2003:

    Windows Server 2003 will transition out of extended support on 14th of July 2015

     

    The Lifecycle site’s FAQ has more information and details on support options if you are not able to complete your migration prior to the end of support dates.

    Make sure that you are able to migrate to a supported product prior to the support expiration date.  Security updates will not be provided for products that are not supported.

    Exchange 2003 Support Expires April 8th 2014

    Cheers,

    Rhoderick