Welcome to TechNet Blogs Sign in | Join | Help

Microsoft UK UC Blog

...architecture, best practice, news & abc of Exchange, OCS and all things UC related
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

Posted: Thursday, May 07, 2009 2:13 PM by msukucc

Comments

DLang said:

Hey, I am trying to adapt your original code to check for a specified file on a network share. So, far, i cannot get it to set the property correctly for the host, therefore, it always comes back else, mind taking a look at it?(See Below)

PS:after the function is succesful, can i pipe $storever to Out-File?

#Attempts to get a list of computer names to test

$exservers = gc pclist.txt

#Beginning of the function loop

foreach ($server in $exservers)

{

   write-host -f green "Examining Store on $server..." -nonewline

   # To get around Cluster share scoping, we need to query via IP...

   $ping = new-object System.Net.NetworkInformation.Ping

   $reply = $ping.send($server)

   $ipaddress = $reply.address

#I think this is the problem, it does not resolve this path correctly

   if (Test-Path "\\$ipaddress\c$\Program Files\Microsoft Office\Office12\WINWORD.EXE)"

   {

       $storever = Get-FileVersionInfo("\\$ipaddress\c$\Program Files\Microsoft Office\Office12\WINWORD.EXE").Fileversion

       write-host -f yellow $storever

   }

   else

   {

       write-host -f red "Unable to Find Store.exe"

   }

}

# June 5, 2009 8:07 AM

msukucc said:

Looks like the parenthesis are in the wrong place, try this...

if (Test-Path "\\$ipaddress\c$\Program Files\Microsoft Office\Office12\WINWORD.EXE")

Neil.

# June 15, 2009 6:18 AM
Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker