Script to find sql server version on multiple instances using Power shell
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
{
$s = New-Object "Microsoft.SqlServer.Management.Smo.Server" $svr
$s | select Name, Version
}) | export-csv -noType $OutFile
$end = get-date
write-host "End: " $end
## You can extract output in excel using delimiters
/*************************Code End *************************************/
Note : SQL query to find windows version using registry
Now days I am doing lot of work over creating inventory where I have to collect lot of info from multiple servers and practically its nether it possible to go on each and every server to extract same nor I can connect multiple sql instance for doing same.
The only way to avoid this manual work is some script which can take server name input from a list and execute on all servers and of course give result in some readable format.
Now days I am learning powershell , and Article of Ronald Dameron helped me to get this done quickly
So here is the plan
1. Create one text file name “X:\Monitoring_Automation\Servers.txt”
è This file will keep list of servers on which I want to execute script or get version of sql instance.
2. Create one PS1 file name “X:\Monitoring_Automation\Version.PS1”
è This file will keep powershell code to generate sql version, code is given below
/**************************** Code Start *************************************/
## Get SQL Version installed on multiple servers
$start = get-date
write-host "Start: " $start[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
## Specify path of output file
$FilePath = "X:\Monitoring_Automation\"
$OutFile = Join-Path -path $FilePath -childPath ("SQLVersions_" + (get-date).toString('yyyyMMdd_hhmmtt') + ".log")
## Output file name will be like “X:\Monitoring_Automation\ SQLVersions_20130906_1248AM.log”
# Below is loop to generate version of each server
@(foreach ($svr in get-content "X:\Monitoring_Automation\Servers.txt"){
$s = New-Object "Microsoft.SqlServer.Management.Smo.Server" $svr
$s | select Name, Version
}) | export-csv -noType $OutFile
$end = get-date
write-host "End: " $end
## You can extract output in excel using delimiters
/******************************* Code End ************************************/
3. Create one batch file named “X:\Monitoring_Automation\Generateversion.bat”
è From this file we will call our power shell code file ie PS1 file, Code will be as below
/*************************Code Start ********************************/
Powershell.exe X:\Monitoring_Automation\version.ps1/*************************Code End *************************************/
Once we create all 3 fill double click on batch file, You wil get output in log file create in our local folder only “X:\Monitoring_Automation\ SQLVersions_20130906_1248AM.log”
Thanks to Ronald Damelon for sharing his knowledge in public blog , This was one of easiest way to find sql server version on multiple servers.
Note : SQL query to find windows version using registry
Ronald help does work well :-)
ReplyDeleteIt is showing only for default instances and not showing for named instances.
ReplyDeleteThen you don't have one
Delete