Powershell i SQL 13 – Invoke-SqlCmd

5-lis-2016

Polecenia dostępne w  module pssql pozwalają na administracji High Avaialbility, Azure, zarzadzanie backupami oraz na wykonywanie ogólnych zadań związanych po prostu z SQL. Na początku właśnie te dwie ostatnie grupy są najbardziej interesujące.

Chyba najbardziej uniwersalnym poleceniem jest Invoke-Sqlcmd. Polecenie pozwala uruchamiać zarówno polecenia przekazywane jako tekst ale również może uruchamiać skrypty znajdujące się w pliku. Polecenia mogą być uruchamiane na dowolnej instancji SQL ponieważ mamy do dyspozycji parametr ServerInstance. W poniższym przykładzie wyświetlone zostaną loginy SQL wraz z informacją czy mają włączoną opcję dotyczące zgodności z polityką haseł oraz opcję wygasania hasła:

IC-01

W przypadku potrzeby uruchomienia skryptu na serwerze nie trzeba oczywiście korzystać z PowerShell! Od lat wraz z narzędziami klienckimi jest dystrybuowany program sqlcmd.exe, który też potrafi wykonywać podobne rzeczy. Główna różnica polega na tym, co obie komendy zwracają. Sqlcmd.exe zwraca po prostu tekst, który jest wyświetlany na ekranie lub zapisywany w pliku. W przypadku invoke-sqlcmd zwracany jest .NET-owy typ DataRow, który o wiele łatwiej jest parsować w celu dalszego wykorzystania w skrypcie lub po prostu wyświetlić w czytelnej postaci tabeli.

Przeanalizujmy następujący przykład:

IC-02

  • Najpierw inicjujemy zmienną $sql, która przechowuje w sobie tylko polecenie SQL pobierające listę niezablokowanych loginów
  • W następnym kroku to polecenie jest uruchamiane na  serwerze a wynik jest zapisywany w zmiennej $results
  • Do zmiennej $results można się odwołać, w pierwszym przykładzie została wyświetlona tabela z wynikami, jeśli jednak wskażemy na jedną kolumnę to pokazane zostaną tylko nazwy loginów
  • Załóżmy, że naszym celem jest zmiana opcji check_expiration na ON. W tym celu konstruujemy polecenie, które w zmiennej $commands zapisze polecenia włączające tą opcję. Skorzystaliśmy przy tym wyłącznie z powershellowej funkcji foreach
  • Tak wygenerowane polecenie jest następnie ponownie uruchamiane na serwerze powodując rzeczywistą zmianę opcji check_policy
  • Ostatnie polecenie po prostu jeszcze raz odpytuje serwer SQL o najświeższe informacje dotyczące loginów

Komentarze są wyłączone

Autor: Rafał Kraik