Here’s another way to get your SQL Server(s) version using PowerShell.   This new function will provide a list of one, a series, or get all SQL Server version(s) on your network.  There’s a help provided with this function and will load thru import, and later remove the SQLPS module.

To use this function:

PS Z:\YourScriptLocation>. .\Get-MSSQLVersion.ps1

PS Z:\YourScriptLocation> Help Get-MSSQLVersion -full


1)    PowerShell V2 - for loading the module at either the PowerShell Console or usign the ISE. 

2)    Need SQL Server 2008 (or greater) installed.

3)    Download the community SQLPS and/or SQLPSv2 modules from the following links:

a)    Download Chad Miller SQLPS module for SQL Server 2008 and 2008 R2:

b)    Or, Download my version of SQLPSv2 for SQL Server ‘Denali’ CTP1:

This is a fun function to study.  Using parameters option to select your SQL Server or just enumerate them from the network.  There’s an option to “-HideBlanks  y” that will prevent to list the SQL Server you don’t have permission and was providing blank results.

Also, take a look at the ”Select” command which allows you to use inline {Expression} to manage the single property object.

This script has a lot of goodies in it.  Have fun scripting!!


Function Get-MSSQLVersion{ 
        Gives the SQL Server version information of one, selected named, or all SQL Servers on the network.  
        This function will give you the ability to get the SQL Server version information for one, a list selected names,  
        or choosing the "ALL" parameter values to get all SQL Server version(s) on the network. 
        It uses SQL Server 2008 (or above) SMO or the community SQL Server 2008/Denali SQLPS module  
        installed in order to run. It has the alias - 'gmsv'. 
        This function will load the SQLPS module, and remove it when done. 
    .Parameter $SQLServerOption  
        SQLServerOption - [String].  Enter the one, a series of selected SQL Server\Instance name(s) or ALL 
        Using the full function name with all paramaters: 
        PS> Get-MSSQLVersion -SQLServerOption 'YourDatabaseName' 
        or using 'ALL' to get all SQL Servers 
        PS> Get-MSSQLVersion -SQLServerOption ALL 
        or to get a series of SQL Servers 
        PS> Get-MSSQLVersion -SQLServerOption "InstanceName\ServerName1,InstanceName\ServerName2..." 
        or using hide blank or null content - Only the SQLServerOption 'All' 
        PS> Get-MSSQLVersion -SQLServerOption ALL -HideBlank y 
        or use the Alias... 
        PS> gsmv -SQLServerOption "InstanceName\ServerName1,InstanceName\ServerName2..."  
        PS> gmsv -SQLServerOption ALL -DateTimeStamped y 
        NAME: Get-MSSQLVersion 
        Alias: gmsv 
        AUTHOR: Max Trinidad      
        Created:  04/05-12/2011 17:10:01 - Script Version 1 - This is an Advanced function. 
        Compatibility - Version 2 
        Requierement: SQL Server 2008 (or above) and have any SQLPS module installed. 
        SQLInstanceName - [Array] - All or "SQLInstanceName1,SQLInstanceName2,..." or "SQLInstanceName" 
        DateTimeStamped - [String] - Enter "Y" to include a date/time stamped with your results 
        HideBlank - [String] - Enter "Y" to stop displaying null or blank product information 
        Return [] - System Array Type Object. 
        [Parameter(Mandatory=$true, Position=0)] [ValidateScript({$_ -ne $null})] [Array] $SQLServerOption, 
        [Parameter(Mandatory=$false, Position=1)] [string] [ValidateLength(1,1)] $DateTimeStamped, 
        [Parameter(Mandatory=$false, Position=2)] [string] [ValidateLength(1,1)] $HideBlank 
    Import-Module SQLPSv2 -DisableNameChecking;   #for Denali or under 
    if($DateTimeStamped.ToUpper() -eq "Y"){  
        Write-Host "Getting SQL Server Version(s) - Started: " (get-date-ForegroundColor Yellow -BackgroundColor Black  
    if($SQLServerOption[0].ToUpper() -eq 'ALL'){ 
        ## - Enumerates all SQL Server found on the network: 
        $SQLSvr = [Microsoft.SqlServer.Management.Smo.SmoApplication]::EnumAvailableSqlServers($false| select name; 
        [Array] $SQLinfo = ForEach($SQL in $SQLSvr){ 
            $MySQL = new-object(‘Microsoft.SqlServer.Management.Smo.Server’) $SQL.Name; 
            if($HideBlank.ToUpper() -eq 'Y'){  
            $MySQL | where {$MySQL.Product.length -ne $null}| select @{Label=”SqlInstanceName”;Expression={ 
                        if($MySQL.Name -contains '\'){ 
                        } else {  
                        };}}, Product, EngineEdition, Version, Platform, ProductLevel; 
            } else { 
            $MySQL | select @{Label=”SqlInstanceName”;Expression={ 
                        if($MySQL.Name -contains '\'){ 
                        } else {  
                        };}}, Product, EngineEdition, Version, Platform, ProductLevel;             
        Write-Host "Total SQL Server(s) scanned: " $SQLSvr.count 
    } else { 
        ## - Manually entered one or selected SQL Server in a provided string array: 
        [Array] $SQLinfo = ForEach($SQL in $SQLServerOption){ 
            $MySQL = new-object(‘Microsoft.SqlServer.Management.Smo.Server’) $SQL; 
            $MySQL | select @{Label=”SqlInstanceName”;Expression={$SQL};}, Product, EngineEdition, Version, Platform, ProductLevel; 
        Write-Host "Total SQL Server(s) scanned: " $SQLServerOption.count 
    Remove-Module SQLPSv2; #for Denali or under 
    $SQLinfo | select SqlInstanceName, Product, EngineEdition, Version, ProductLevel | sort SqlInstanceName, Product | ft -auto 
    Write-Host "Total SQL Server(s) listed: " $SQLinfo.count 
    if($DateTimeStamped.ToUpper() -eq "Y"){  
        Write-Host "Getting SQL Server Version(s) -   Ended: " (get-date-ForegroundColor Yellow -BackgroundColor Black 
}; Set-Alias gmsv Get-MSSQLVersion;