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()
Ś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ę