Description

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

Requirements/Contribution:

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: http://sev17.com/2010/07/making-a-sqlps-module/

b)    Or, Download my version of SQLPSv2 for SQL Server ‘Denali’ CTP1: http://www.maxtblog.com/2010/11/denali-get-your-sqlpsv2-module-set-to-go/

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!!

Script

PowerShell
Edit|Remove
Function Get-MSSQLVersion{ 
    <#  
    .SYNOPSIS 
        Gives the SQL Server version information of one, selected named, or all SQL Servers on the network.  
    .Description  
        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 
    .Example  
        Using the full function name with all paramaters: 
        PS> Get-MSSQLVersion -SQLServerOption 'YourDatabaseName' 
    .Example 
        or using 'ALL' to get all SQL Servers 
        PS> Get-MSSQLVersion -SQLServerOption ALL 
    .Example     
        or to get a series of SQL Servers 
        PS> Get-MSSQLVersion -SQLServerOption "InstanceName\ServerName1,InstanceName\ServerName2..." 
    .Example  
        or using hide blank or null content - Only the SQLServerOption 'All' 
        PS> Get-MSSQLVersion -SQLServerOption ALL -HideBlank y 
    .Example     
        or use the Alias... 
        PS> gsmv -SQLServerOption "InstanceName\ServerName1,InstanceName\ServerName2..."  
        or  
        PS> gmsv -SQLServerOption ALL -DateTimeStamped y 
    .Notes  
        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. 
    .Link  
        about_functions  
        about_functions_advanced  
        about_functions_advanced_methods  
        about_functions_advanced_parameters  
    .Inputs 
        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 
    .Outputs 
        Return [] - System Array Type Object. 
    #>  
Param( 
        [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 '\'){ 
                            $MySQL.Name; 
                        } else {  
                            $MySQL.Name+'\Default'; 
                        };}}, Product, EngineEdition, Version, Platform, ProductLevel; 
            } else { 
            $MySQL | select @{Label=”SqlInstanceName”;Expression={ 
                        if($MySQL.Name -contains '\'){ 
                            $MySQL.Name; 
                        } else {  
                            $MySQL.Name+'\Default'; 
                        };}}, 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;