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ę






























