Powershell: SQL Edition und Version live abfragen

In einer Hierarchie mit mehr als 70 Siteservern einer ConfigMgr 2012 R2 Umgebung stellt sich vielleicht mal die Frage der verwendeten Editionen und  deren Versionen.

Basierend auf einer schon früher veröffentlichten SQL Query Abfrage

function Invoke-SQL 
{
    param(
    [string] $dataSource = 'Server-Name',
    [string] $database = "Database-Name",
    [string] $sqlCommand = $(throw "Please specify a query.")
        )
                                          
    $connectionString = "Data Source=$dataSource; " + 
                    "Integrated Security=SSPI; " + 
                    "Initial Catalog=$database"
                                                                      
    $connection = new-object system.data.SqlClient.SQLConnection($connectionString)
    $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
    $connection.Open()
                                                                                  
    $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
    $dataset = New-Object System.Data.DataSet
    $adapter.Fill($dataSet) | Out-Null
                                                                                              
    $connection.Close()
    $dataSet.Tables
                                                                                                      
}

habe ich dann folgendes kurzes Script erstellt:

function get-SQLServerData
{
    param (
		[string]$CASServer,
		[string]$CASSiteCode,
        [string]$Path
		)

	$ServerAnalyse = @()
	$ServerList = (Get-WmiObject -ComputerName $CASServer -Namespace "root\SMS\site_$CASSiteCode"-Query 'select ServerName from SMS_Site').ServerName
	foreach ($Server in $Serverlist)
	{
		if (Test-Connection $Server -Count 1)
		{
			$Data = Invoke-SQL -dataSource $Server -sqlCommand "SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')" -database ""
			$Edition = $Data.Column3
			$SP = $Data.Column2
			$Version = $Data.Column1
		}
		Else
		{
			$Edition = 'N/A'
			$SP = 'N/A'
			$Version = 'N/A'
		}
		
		$ServerItem = New-Object -TypeName PSObject
		$ServerItem | Add-Member –MemberType NoteProperty –Name Server –Value $Server
		$ServerItem | Add-Member -MemberType NoteProperty -Name Edition -Value $Edition
		$ServerItem | Add-Member -MemberType NoteProperty -Name SP -Value $SP
		$ServerItem | Add-Member -MemberType NoteProperty -Name Version -Value $Version
		$ServerAnalyse += $ServerItem
	}
	
	$ServerAnalyse | Export-Csv -Path $Path
}

Das Script holt sich aus der WMI des Servers eine Liste aller SiteServer (CAS / Primary / Secondary) und sortiert damit schon mal die reinen Distribution Points aus. Diese haben keine SQL Instanz. Danach geht’s durch die Listen wobei für jeden SiteServer die SQL Abfrage für die Edition, der Patch-Level und die Version/Build-Nummer gemacht wird. Das Ganze aber nur, wenn der Server auch per „Ping“ erreichbar ist.

Der Aufruf folgt so:

get-SQLServerData -CASServer ‚Server FQDN‘ -CASSiteCode ‚SiteCode‘ -Path ‚Pfad zur ExportDatei (csv)‘

Getestet ist dieses Script in einer Umgebung mit CAS, 3 Primary und eine Vielzahl von Secondary Sites.

Facebooktwittergoogle_plus
Facebooktwittergoogle_plus

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

Cookies help us deliver our services. By using our services, you agree to our use of cookies. More Info | Close
%d Bloggern gefällt das: