Po załadowaniu modułu w systemie pojawił się nowy provider pozwalający na uzyskiwanie dostępu do obiektów bazodanowych tak jakby były one folderami i plikami w specjalnym systemie plików. Obecność providera oraz wirtualnego dysku można sprawdzić poleceniami Get-PSProvider oraz Get-PSDrive:
Po przejściu poleceniem cd na nowy dysk sqlserver:\ można wydawać normalne polecenia jak ls czy cd pozwalające przechodzić przez strukturę sqlserver:
- Na pierwszym poziomie odnajdziesz poszczególne usługi z jakich jest zbudowany SQL server. Zazwyczaj najciekawszy to SQL – odpowiadający za silnik bazy danych, ale jak widać ten napęd pozwala na administrowanie także innymi usługami
- Po przejściu do folderu SQL odnajdziesz listę widocznych dla sesji powershell serwerów. Nie działa tutaj autouzupełnianie komend o nazwy serwerów. Każdorazowe odpytanie o widoczne serwery wymagałoby rozesłania takiego pytania po sieci, żeby sprawdzić czy nie pojawił się jakiś nowy serwer. Jeśli chcesz więc szybko przejść między serwerami, lepiej wpisuj ich nazwy ręcznie bez korzystania z TAB
- Następny poziom to instancje na serwerze. Również tutaj należy uważać z autouzupełnianiem
- I wreszcie kolejny poziom to właściwie object explorer z SSMS.
Ukoronowaniem przechodzenia przez strukturę SQL Server jest wyświetlenie dostępnych baz danych. Logika SQLProvidera, jest tutaj jednak taka, że domyślnie nie są wyświetlane systemowe bazy danych. Aby wyświetlić również bazy systemowe należy użyć parametru -Force:
Jak wiadomo, każdy „item” w powershell jest obiektem. Jakiego typu obiektem jest baza danych? Wyślij wynik polecenia do Get-Member:
Pierwsza linijka wskazuje na nazwę typu Smo.Database. Jest to typ o dość wielu właściwościach i metodach, które od tej pory można wykorzystywać w swoich skryptach! Fantastycznie! W tak prosty sposób można np zmienić bazę danych na „tylko do odczytu”, zweryfikować wynik i wrócić do poprzednich ustawień:
A w taki sposób można sprawdzić wielkość bazy i ilość wolnego miejsca:
Zwróćmy uwagę, że wielkość bazy (Size) jest domyślnie podawany w MB, a ilość wolnego miejsca w bazie w KB. Stąd dodatkowe działanie jakie trzeba było wykonać podczas obliczeń. Jeśli masz wątpliwości co do tego jaka wartość znajduje się w jakim polu to korzystaj z dokumentacji:
https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.database.aspx
Podobnie można np wylistować tabele:
Oczywiście takie czynności dałoby się wykonać z poziomu SQL. Dlaczego więc PowerShell miałby być lepszy? Otóż moim zdaniem PowerShell pracuje bliżej systemu operacyjnego, co pozwala połaczyć ze soba moc zapytań SQL z informacjami uzyskiwanymi z Windows. Mając obie te rzeczy można zmieniać konta na których pracuje SQL, odnajdywać pliki, które są na dysku a SQL z nich nie korzysta, pracować z wieloma instancjami itp. PowerShell okazuje się więc bardzo pomocny jeśli masz więcej serwerów jakimi musisz zarządzać.