Administrator SQL uwielbia życie w swoim zamkniętym SQL-owym świecie. Czasem jednak administrator musi obejrzeć swój serwer z zewnątrz. Odpowiedzieć na pytanie ile instancji jest zainstalowanych, jakie usługi w ramach tych instancji zostały wybrane albo jakie konta są przez te usługi wykorzystywane. Nowe wersje SQL nierzadko pozwalają odpytać o takie informacje z wykorzystaniem widoków (jak np select * from sys.dm_server_services) bez odczytywania informacji z rejestru. A my przyjrzymy się, jak wykonać te zadania z poziomu powershell.
Zacznijmy od czegoś prostego. Get-Service zwraca informacje o wszystkich usługach w systemie Windows. Dlaczego więc, szukając informacji o SQL nie zawęzić listy usług do tych, które zawierają w nazwie SQL:
Get-Service *sql*
Tak, to prawda. Wystarczyłoby, żeby ktoś uruchamiał własną usługę o nazwie np. SQLAudit i to polecenie też złapie tę usługę. Polecenie nie jest więc idealne, ale i tak zadziała na prawie 90% systemów. Jeśli trzeba zmienić pewne ustawienia usługi np. przestawienie usługi SQL Browser z trybu disabled na manual wykonasz poleceniem:
Set-Service sqlbrowser -StartupType Manual
a uruchomienie usługi to:
Start-Service sqlbrowser
Standardowe polecenie Get-Service nie zwraca zbyt szczegółowych informacji. Jeśli np. chcesz zobaczyć na jakim koncie pracuje usługa SQL lepiej będzie skorzystać z Get-WMIObject. Poniższe polecenie zwraca dość szczegółowe informacje o każdej usłudze, która w nazwie zawiera SQL:
Get-WmiObject -Class Win32_Service | where { $_.name -match 'sql’ } | Format-List -Property *
Jednak od czego mamy SMO? Załadujmy najpierw niezbędne biblioteki i utwórzmy obiekt typu ManagedComputer:
[reflection.assembly]::LoadWithPartialName(„Microsoft.SqlServer.SqlWmiManagement”)
$mc = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Wmi.ManagedComputer localhost
A teraz pora na fantastyczne odpowiedzi. Jakie instancje są zainstalowane?
$mc.ServerInstances
Jakie usługi składają się na instancje SQL?
$mc.Services
Prosto łatwo i przyjemnie. Tak ma być.