Skip to main content

PowerShell: Quick SQL Server Version Check

I have to keep track of our SQL Server version inventory.  The goal is to reduce the SQL Server 2000 population as fast as possible.


The following PowerShell script will produce a csv file containing the database server name and the version of SQL Server it's running.


1:  ## Get SQL Version installed on multiple servers ##
2:  ## ./sqlver.ps1
3:  $start = get-date
4:  write-host "Start: "  $start
5:   
6:  [reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
7:   
8:  $FilePath = "C:\Output"
9:  $OutFile = Join-Path -path $FilePath -childPath ("SQLVersions_" + (get-date).toString('yyyyMMdd_hhmmtt') + ".log")
10:   
11:  # Version inventory
12:  @(foreach ($svr in get-content "C:\Input\AllLOBServers.txt")
13:  {
14:      $s = New-Object "Microsoft.SqlServer.Management.Smo.Server" $svr
15:      $s | select Name, Version
16:   
17:  })  | export-csv -noType $OutFile
18:   
19:  $end = get-date    
20:  write-host "End: "  $end
21:   

The csv file format gives you the option of using Excel or importing to a database table for review.


PowerShell is a great way to automate simple tasks that become tedious when you need to execute that task on hundreds of servers.

Comments

Post a Comment

Popular posts from this blog

Modifying Endpoint URLs on Availability Group Replicas

I recently had to modify the Endpoint URLs on our SQL Server Availability Group replicas. 

The reason for this blog post is that I could not answer the following questions:

Do I need to suspend data movement prior to making this change? 

Would this change require a restart of the database instance?

I spent enough time searching on my own to no avail that I tossed the question to the #sqlhelp hashtag on Twitter and Slack but didn't get an answer prior to executing the change request.

After reading the relevant documentation, I think it's probably a good idea to suspend data movement for this change.

The T-SQL is straightforward. 

USE MASTER
GO

ALTER AVAILABILITY GROUP [AG1] 
MODIFY REPLICA ON 'SQL2012-1' WITH (ENDPOINT_URL = 'TCP://10.10.10.1:5022');

ALTER AVAILABILITY GROUP [AG1] 
MODIFY REPLICA ON 'SQL2012-2' WITH (ENDPOINT_URL = 'TCP://10.10.10.2:5022');

ALTER AVAILABILITY GROUP [AG2] 
MODIFY REPLICA ON 'SQL2012-1' WITH (ENDPOINT_URL = 'TCP://10…

AzureRM Templates 101

I've recently started working with AzureRM templates to build new environments.

This document really helped me understand the template structure when I first started looking at them.
https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authoring-templates

I love examples when I'm trying to learn something new and the Quick Start templates are the mother lode. 
https://github.com/Azure/azure-quickstart-templates

Our goal is to incorporate our templates into an Azure Blueprint so that we can quickly build new environments when needed. AzureRM templates can be artifacts of a blueprint.
https://docs.microsoft.com/en-us/azure/governance/blueprints/overview