Powershell i SQL 16 – wykrywanie instancji w sieci

5-lis-2016

Teraz pora na funkcję, która nie należy do SMO ale do .NET! Funkcja ta ma najczęściej za zadanie pomóc użytkownikowi odnaleźć SQL  server znajdujący się gdzieś w sieci, kiedy użytkownik nie zna jego nazwy, ale raczej wolałby wybrać serwer z listy dostępnych w danej chwili instancji SQL.

Ta funkcja to:

([System.Data.Sql.SqlDataSourceEnumerator]::Instance).GetDataSources()

EnumerateSQLInstances

Świetnie! Mając taką informację jesteśmy o krok od skryptu, który spróbuje wykryć serwery SQL dostępne w sieci i odpytać je o szczegóły wersji, która jest tam zainstalowana:

[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO")
$instances = ([System.Data.Sql.SqlDataSourceEnumerator]::Instance).GetDataSources()

$versionReport = @{}
ForEach($i in $instances)
{
 $instancename = $i.ServerName
 
 if($i.InstanceName -ne '')
 {
 $instancename = "$($i.ServerName)\$($i.InstanceName)"
 }

 $SqlServer = New-Object Microsoft.SqlServer.Management.Smo.Server $instancename
 $versionReport[$i.ServerName]=$SqlServer.VersionString
}

$versionReport | FT -AutoSize

Prawda, że proste?

  • Zakładając, żę w zmiennej $instances mamy wynik wspomnianej już funkcji wykonujemy pętlę przez wszystkie wykryte instancje
  • Jeśli nazwa instancji jest niepusta to oznacza to, że pracujemy z instancją nazwaną i trzeba odpowiednio skonstruować nazwę instancji jako nazwa_serwera\nazwa_instancji
  • Teraz można utworzyć obiekt odpowiadający serwerowi SQL
  • Zapytać go o wersję SQL, która jest zainstalowana
  • Wpisać wynik do wcześniej zadeklarowanej tablicy hashowanej
  • I na końcu wyświetlić tą tablicę

Komentarze są wyłączone

Autor: Rafał Kraik