Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc

[PL] PowerShell, Katmai - dwa bratanki

W zeszłym roku na konferencji IT Forum (pisałem o tej konferencji na moim blogu) najbardziej przypadła mi do gustu prezentacja Boba Beauchemin'a o integracji SQL Server 2008 i PowerShella. Wtedy Bob prezentował dema na maszynie wirtualnej z objętą NDA wersją SQL Server 2008 CTP6. Dziś wersję CTP6 mam już zainstalowaną na swoim laptopie i mogę się pobawić tą nowinką.

Zapewne każdy, kto choć trochę śledzi rozwój systemów Microsoft, wie, czym jest PowerShell. Z grubsza jest to rozszerzona konsola linii poleceń, w której użytkownik może korzystać z ogromnej gamy wbudowanych poleceń i aliasów stanowiących potężne rozszerzenie możliwości standardowej konsoli oraz może w prosty sposób używać bibliotek .NET Framework'a.

Ostatnimi czasy obiło mi się o uszy, że Microsoft "dorzucił" PowerShell do Common Criteria, czyli do komponentów, które pojawią się lub będą wspierały praktycznie wszystkie produkty Microsoft. Póki co, raczej nie jest to prawdą, bo w Windows Core nie ma PowerShella (z racji braku .NET Framework'a).

Jak wygląda wsparcie dla SQL Server 2008 w PowerShellu . Po otwarciu aplikacji SQL Server Management Studio użytkownik ma możliwość uruchomienia konsoli PowerShell wykorzystującej specjalnego dedykowanego providera dla SQL Server 2008. Dzięki wykorzystaniu tego providera konsola oferuje możliwość nawigowania po instancjach, bazach danych i predefiniowanych folderach logicznych grupujących na przykład obiekty baz danych za pomocą standardowych poleceń typu cd czy dir, a także wykonywanie operacji na instancjach SQL Server, bazach danych czy obiektach tych baz.

Już próba wylistowania napędów dostępnych w konsoli PowerShell podpowiada, że nie używamy zwyczajnej konsoli PowerShell. Wśród znanych napędów, takich jak dyski logiczne czy rejestr, znajdziemy pozycje takie jak SQL, SQLSERVER czy SQLPolicy.

Nawigując poleceniem cd do wnętrza napędu SQL:\ dostajemy się w końcu do listy instancji na lokalnym serwerze. Po wejściu do ścieżki wybranej instancji i wylistowaniu zawartości okaże się, że wewnątrz znajdują się pewne logiczne foldery, z których spora część nie jest obca użytkownikom systemu SQL Server i narzędzia Management Studio (np. folder Databases).

Wejście w folder Databases i wylistowanie zawartości daje listę baz danych (z wyjątkiem baz systemowych). Poniższy zrzut ekranu ilustruje proces usunięcia bazy danych o nazwie CLRHCL z serwera.

Można też zmieniać opcje baz danych - patrz poniższy zrzut ekranu.

Tu ciekawostka - zmianę opcji bazy powoduje dopiero wywołanie metody Alter() obiektu klasy Database. Czyli nawet jeśli zmienimy kilka opcji jedna po drugiej, zmiany zostaną zapisane dopiero po wywołaniu wspomnianej metody.

Ponieważ w odniesieniu do instancji SQL Server, baz danych czy obiektów tychże baz PowerShell używa standardowych klas z biblioteki SMO, użytkownik może użyc na przykład metody Script() do skryptowania obiektów.

To oczywiście tylko niewielki fragment funkcjonalności, jakie oferuje konsola PowerShell administratorom SQL Server. Ale wydaje mi się, że nawet przedstawione możliwości dają pogląd na to, jak ciekawym narzędziem jest ta konsola. Oczywiście, można w niej także wykorzystać gotowe skrypty i biblioteki - tu polecam PowerSMO autorstwa Dana Sullivan'a (poniżej zamieszczam odnośniki do opisu możliwości PowerSMO).

Managing SQL Server using PowerSMO
PowerSMO At Work Part I: DBA Scripts and Functions
PowerSMO at Work Part 2

Warto pamiętać, że zapewne znaczną część funkcjonalności oferowanych przez PowerSMO w konsoli PowerShell dostępnej w SQL Server 2008 użytkownik dostaje bez używania tej biblioteki (sam provider dostarcza takie możliwości). Ale PowerSMO jest, moim zdaniem, ciekawym przykładem na to, co można w PowerShellu osiągnąć, nawet bez dedykowanych provider'ów.

A zatem do dzieła, testujmy konsolę PowerShell'a dla DBA. A jeśli komuś uda się osiągnąć jakieś ciekawe wyniki podczas pracy z tą konsolą, chętnie o tym posłucham lub poczytam.

Opublikowane 3 kwietnia 2008 08:10 przez brejk

Komentarze:

# re: PowerShell, Katmai - dwa bratanki

3 kwietnia 2008 10:25 by Wojciech Gebczyk

"zmianę opcji bazy powoduje dopiero wywołanie metody Alter() obiektu klasy Database".

Ha! Wyglada jak wraper na Microsoft.SqlServer.Smo. Wczoraj walczylem z tym ustrojstwem. Okazuje sie ze jak masz Database ktore ma tabele itp, to jesli zmieni sie pare tabel i zrobi Create lub Alter na Database to alter pojdzie ale na database a nie spropaguje sie w dol. Troche nie fajnie bo chialem cala strukture stowrzyc i potem wykonac w jednym batchu/kroku, ale nie udalo mi sie :/

# re: PowerShell, Katmai - dwa bratanki

3 kwietnia 2008 10:39 by brejk

Dokładnie tak jest, Wojtku, bo jak sprawdzisz sobie np. jakiej klasy jest obiekt bazy:

$db = gi DowolnaBaza

$db.GetType() | format-list

to zobaczysz, że UnderlyingSystemType to nic innego jak Microsoft.SqlServer.Management.Smo.Database :-)

Komentarze anonimowe wyłączone

About brejk

MVP, MCT, SQL Server geek