Moduł SqlServer w PowerShell dostarcza polecenia cmdlet do zarządzania instancjami, bazami i zadaniami.
Moduł SqlServer w PowerShell i jego zakres działania
Moduł SqlServer dla PowerShell zawiera polecenia cmdlet przeznaczone do pracy z Microsoft SQL Server. Służy między innymi do wykonywania zapytań T-SQL, odczytywania właściwości instancji, przeglądania baz danych, zarządzania zadaniami SQL Server Agent oraz wykonywania operacji tworzenia i odtwarzania kopii zapasowych. Moduł może być używany z lokalną instancją SQL Server, instancją wskazaną przez nazwę sieciową oraz z usługami SQL Server działającymi w środowisku Azure, jeżeli dane polecenie obsługuje dany wariant połączenia.
SqlServer jest współczesnym modułem PowerShell rozwijanym dla narzędzi administracyjnych SQL Server. Zastąpił starszy moduł SQLPS, który był dostarczany razem z wcześniejszymi wersjami SQL Server Management Studio i instalacji serwera. Po zainstalowaniu modułu można sprawdzić dostępne polecenia za pomocą Get-Command -Module SqlServer, a informacje o samej wersji odczytać poleceniem Get-Module SqlServer -ListAvailable. Wersja modułu ma znaczenie, ponieważ dostępne parametry i obsługiwane funkcje mogą zależeć od wydania narzędzi.
Instalacja, import i nawiązywanie połączenia z SQL Server
Moduł można zainstalować z repozytorium PowerShell Gallery poleceniem Install-Module -Name SqlServer. Do instalacji w zakresie bieżącego konta służy wariant Install-Module -Name SqlServer -Scope CurrentUser. W środowisku, w którym moduł został zainstalowany, jawny import wykonuje się przez Import-Module SqlServer. Przed instalacją lub aktualizacją warto sprawdzić, czy system korzysta z właściwego repozytorium i czy administrator dopuszcza instalowanie modułów z zewnętrznego źródła.
Najczęściej używanym poleceniem do wykonywania instrukcji SQL jest Invoke-Sqlcmd. Przykładowe połączenie z domyślną instancją może mieć postać Invoke-Sqlcmd -ServerInstance "SERWER01" -Database "BazaTestowa" -Query "SELECT name FROM sys.databases". Parametr -ServerInstance wskazuje nazwę komputera i opcjonalnie instancję nazwaną, na przykład SERWER01\SQLEXPRESS. Parametr -Database określa bazę używaną jako kontekst zapytania, natomiast -Query przekazuje tekst T-SQL. Przy uwierzytelnianiu Windows można użyć bieżącego konta, a przy uwierzytelnianiu SQL Server parametru -Credential z obiektem poświadczeń PowerShell.
Cmdlety do baz, instancji, zadań i kopii zapasowych
Moduł udostępnia polecenia, które pozwalają odczytywać obiekty SQL Server bez ręcznego budowania każdego zapytania administracyjnego. Get-SqlInstance służy do pobierania informacji o instancji, a Get-SqlDatabase do pracy z obiektami baz danych. W praktyce polecenia te mogą być łączone z potokiem PowerShell, filtrowaniem Where-Object i eksportem wyników do pliku. Dzięki temu można przygotować powtarzalny raport obejmujący między innymi nazwy baz, ich stan, rozmiar lub ustawienia odzyskiwania, o ile konkretna właściwość jest dostępna dla używanej wersji modułu i serwera.
Do zadań SQL Server Agent służą między innymi Get-SqlAgentJob, Get-SqlAgentJobStep oraz polecenia pozwalające uruchamiać i zatrzymywać zadania. Operacje kopii zapasowych obsługują cmdlety takie jak Backup-SqlDatabase i Restore-SqlDatabase. Przed wykonaniem odtworzenia należy uwzględnić typ kopii, kolejność kopii pełnych, różnicowych i dziennika transakcji oraz dostępność plików kopii dla procesu SQL Server. Samo wywołanie cmdletu nie zastępuje sprawdzenia, czy kopia jest kompletna i czy jej odtworzenie odpowiada wymaganiom danej bazy.
Podczas automatyzacji trzeba rozróżnić polecenia wykonujące odczyt od tych, które zmieniają stan serwera. Invoke-Sqlcmd może uruchomić zarówno zapytanie SELECT, jak i instrukcję modyfikującą dane lub konfigurację. Skrypt powinien więc jawnie wskazywać serwer, bazę, poświadczenia i oczekiwany tryb działania, a także obsługiwać błędy oraz kod zakończenia. Przy większych skryptach przydatne są parametry -QueryTimeout, -ConnectionTimeout i -ErrorAction Stop, jeżeli są obsługiwane przez używaną wersję polecenia.
Kontrola działania skryptów SqlServer podczas diagnostyki
Problemy z modułem mogą wynikać z kilku różnych warstw: braku instalacji, niezgodnej wersji PowerShell, konfliktu z modułem SQLPS, niedostępności dostawcy SQL Server, błędnego adresu instancji albo nieudanego uwierzytelnienia. Podstawową kontrolę można rozpocząć od Get-Module -ListAvailable SqlServer, następnie zaimportować moduł i sprawdzić jego polecenia przez Get-Command -Module SqlServer. Jeżeli PowerShell zgłasza, że cmdlet nie istnieje, nie oznacza to jeszcze awarii SQL Server; często problem dotyczy jedynie sesji, ścieżki modułów lub importu niewłaściwej wersji.
Przy diagnozowaniu połączenia należy osobno sprawdzić rozwiązywanie nazwy hosta, dostępność portu, działanie właściwej usługi SQL Server oraz sposób uwierzytelniania. Błąd logowania nie jest równoważny z błędem sieciowym, a przekroczenie limitu czasu nie musi oznaczać uszkodzenia bazy. Warto uruchomić prostą instrukcję odczytującą bieżącą instancję, na przykład SELECT @@SERVERNAME AS ServerName, DB_NAME() AS DatabaseName, i porównać wynik z parametrami skryptu. Pozwala to wykryć sytuację, w której polecenie połączyło się z inną instancją lub inną bazą niż zakładano.
W serwisowym środowisku diagnostycznym istotne jest także zachowanie powtarzalności. Skrypt powinien zapisywać użyte parametry, wynik poleceń i komunikaty błędów, ale nie powinien ujawniać haseł ani umieszczać ich bezpośrednio w treści poleceń. Przy zmianach wykonywanych przez Backup-SqlDatabase, Restore-SqlDatabase lub polecenia zarządzające zadaniami trzeba wcześniej potwierdzić cel operacji i stan systemu. Takie podejście ułatwia odróżnienie problemu samego modułu SqlServer od błędów konfiguracji, uprawnień albo działania konkretnej instancji Microsoft SQL Server.