W kolejnym przykładzie, spróbujemy uzyskać kilka informacji o instancji. Ponieważ informacje wyciągniemy z serwera wykorzystując zapytanie, przy okazji dowiesz się także jak uruchamiać zapytania na wybranej instancji SQL serwera w inny sposób niż pokazaliśmy to w części drugiej serii.
Zaczynamy od załadowania modułu SQLPS:
Import-Module sqlps
Zakładamy, że chcemy uzyskać informacje z kilku instancji SQL, więc przygotowujemy zmienną przechowującą listę nazw tych instancji. U nas dwa razy odwołamy się do tej samej instancji, ale to tylko dlatego, że na aktualnie wykorzystywanym komputerze jest zainstalowana tylko jedna instancja (proszę o wyrozumiałość):
$Servers = 'localhost','localhost'
Teraz pora zdecydować, co chcemy odczytać z tych instancji. Będzie to po prostu zapytanie do uruchomienia
$query = "SELECT SERVERPROPERTY('ServerName') As ServerName, SERVERPROPERTY('ProductVersion') As ProductVersion, SERVERPROPERTY('Edition') AS Edition"
No i pora na uruchomienie zapytania. Można to zrobić co najmniej na dwa sposoby:
1. – Wykorzystamy parametr -ServerInstance polecenia Invoke-Sqlcmd. Lista serwerów jest przekazywana potokiem do ForEach, który z kolei wywołuje Invoke-Sqlcmd na aktualnie iterowanej nazwie instancji:
$Servers | foreach { $server = "$_"; Invoke-Sqlcmd -query $query -ServerInstance $server }
2. – Komendą Change-Location (alias cd) zmieniamy kontekst na właściwy dla danej instancji. Tam wykonujemy Invoke-Sqlcmd w bieżącym kontekście, czyli na wybranej instancji:
$Servers | foreach { $server = "$_"; Set-Location SQLSERVER:\SQL\$Server; ` Invoke-Sqlcmd -query $query -ServerInstance $server }
Ale nie tylko zapytania SQL wchodzą w grę. Sporo informacji uda się uzyskać przez WMI. Poniższe polecenie wyświetli informacje o aliasach zdefiniowanych na serwerze:
Get-WmiObject -Namespace root\Microsoft\SqlServer\ComputerManagement12 -Class SqlServerAlias
Kolejne odwołanie do WMI pozwala ustalić wartość opcji FileStream dla wybranej instancji. Po wykonaniu obu linijek, w zmiennej $wmi mamy obiekt zawierający wartość opcji FileStream:
$instance = 'MSSQLSERVER'
$wmi = Get-WmiObject -Namespace root\Microsoft\SqlServer\ComputerManagement12 -Class FilestreamSettings | Where {$_.InstanceName -eq $instance}
Posiadając ten obiekt można nawet zmienić opcję, korzystając z metody EnableFilestream:
$wmi.EnableFilestream(3, $instance)