Updated : Exchange version powershell script

Further to my blog post on April 30th, I have updated the powershell script to output in a more usable manner and also detect more information about your exchange servers…

ServerName TransportVer CASver StoreVer
SERVER1 08.01.0336.000 08.01.0336.000 Not Installed
SERVER2 08.01.0336.000 08.01.0336.000 Not Installed
SERVER3 08.01.0336.000 08.01.0336.002 Not Installed
SERVER4 08.01.0336.000 08.01.0336.002 Not Installed
SERVER5 08.01.0336.000 08.01.0336.002 Not Installed
SERVER6 08.01.0336.000 08.01.0336.002 Not Installed
SERVER7 08.01.0336.000 08.01.0336.000 Not Installed
SERVER8 08.01.0336.000 08.01.0336.000 Not Installed
SERVER9 08.01.0336.000 08.01.0336.002 Not Installed
SERVER10 08.01.0336.000 08.01.0336.002 Not Installed
SERVER11 08.01.0336.000 08.01.0336.002 Not Installed
SERVER12 08.01.0336.000 08.01.0336.002 Not Installed
SERVER13 Not Installed Not Installed 08.01.0336.000
SERVER14 08.01.0336.000 08.01.0336.002 Not Installed
SERVER15 08.01.0336.000 08.01.0336.002 Not Installed
SERVER16 08.01.0336.000 08.01.0336.002 Not Installed
SERVER17 08.01.0336.000 08.01.0336.002 Not Installed
SERVER18 Not Installed Not Installed 08.01.0336.000
SERVER19 08.01.0336.000 08.01.0336.002 Not Installed
SERVER20 08.01.0336.000 08.01.0336.002 Not Installed
SERVER21 08.01.0336.000 08.01.0336.002 Not Installed
SERVER22 08.01.0336.000 08.01.0336.002 Not Installed
SERVER23 08.01.0336.000 08.01.0336.000 Not Installed
SERVER24 08.01.0336.000 08.01.0336.000 Not Installed
SERVER25 08.01.0336.000 08.01.0336.000 Not Installed
SERVER26 08.01.0336.000 08.01.0336.000 Not Installed
SERVER27 08.01.0336.000 08.01.0336.000 Not Installed
SERVER28 08.01.0336.000 08.01.0336.000 Not Installed

Powershell Code…

$exservers = get-exchangeserver

function MakeData($server,$transportver,$casver,$storever) {

    $data1 = $server
    $data2 = $transportver
    $data3 = $casver
    $data4 = $storever

    $out = new-object psobject
    $out | add-member noteproperty ServerName $data1
    $out | add-member noteproperty TransportVer $data2
    $out | add-member noteproperty CASver $data3
    $out | add-member noteproperty StoreVer $data4
    write-output $out

}

foreach ($server in $exservers)
{

    #
    # We need to test for three occurrences here
    #

    # To get around cluster share scoping we need to query this via IP...
    $ping = new-object System.Net.NetworkInformation.Ping
    $reply = $ping.send("$server")

    if ($reply.status -ne "success")
    {
        #
        # Sometimes if the server is distant the first ping fails
        # this is just a last chance to see if its really down...
        #
        $reply = $ping.send("$server")
        $reply = $ping.send("$server")
    }

    $ipaddress = $reply.address

    if ($reply.status -eq "success")
    {

        #
        # Check Store Version
        #
        
        if (Test-Path -path "\\$ipaddress\c$\program files\microsoft\exchange server\bin\store.exe")
        {

            $storever = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("\\$ipaddress\c$\program files\microsoft\exchange server\bin\store.exe").Fileversion
        }
        else
        {
            $storever = "Not Installed"
        }

        #
        # Check Transport Version
        #

        if (Test-Path -path "\\$ipaddress\c$\program files\microsoft\exchange server\TransportRoles\data")
        {

            $transportver = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("\\$ipaddress\c$\program files\microsoft\exchange server\bin\EdgeTransport.exe").Fileversion
        }
        else
        {
            $transportver = "Not Installed"
        }

        #
        # Check Client Access Version
        #

        if (Test-Path -path "\\$ipaddress\c$\Program Files\Microsoft\Exchange Server\ClientAccess\Owa\Bin\Microsoft.Exchange.Clients.Owa.dll")
        {

            $casver = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("\\$ipaddress\c$\Program Files\Microsoft\Exchange Server\ClientAccess\Owa\Bin\Microsoft.Exchange.Clients.Owa.dll").Fileversion
        }
        else
        {
            $casver = "Not Installed"
        }

        MakeData $server $transportver $casver $storever

    }
    else
    {

    $transportver = "down"
    $casver = "down"
    $storever = "down"

    MakeData $server $transportver $casver $storever

    }
}

Posted by Neil Johnson , MCS UK, MCM Exchange 2007