Powershell i SQL 08 – Informacje o instancji, zapytania

5-Lip-2015

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 }

server_info

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)

Dodaj komentarz:

Autor: Rafał Kraik