Команды Windows PowerShell могут быть очень ценным дополнением к инструментам управления SQL Server. И хотя лично я не думаю, что оболочка PowerShell в ближайшее время заменит SQL Server Management Studio (SSMS), она может использоваться в широком диапазоне задач управления с помощью сценариев. В PowerShell можно исполнять команды T-SQL, а также работать с объектами за пределами базы данных SQL Server. Команды модуля PowerShell для SQL Server можно применять для навигации по объектам баз данных SQL Server и управления этими объектами, сценарии PowerShell могут запускаться службой SQL Agent. Кроме того, вы можете импортировать и исполнять с помощью PowerShell сборки SMO или ADO.NET. В этой статье я опишу четыре основные команды PowerShell, которые помогут вам начать работу с PowerShell для SQL Server.

#1. Импорт модуля sqlps

Если вы используете пункт контекстного меню Start PowerShell в консоли SSMS, то модуль sqlps загружается автоматически. Однако если вы хотите задействовать команды модуля PowerShell для SQL Server из обычного окна PowerShell, вам необходимо предварительно импортировать модуль sqlps в среду PowerShell. Импортировать модуль можно с помощью следующей команды:

Import-Module sqlps

При этом выводится окно с предупреждением, так как команда разработчиков SQL Server использовала две неодобренные команды: Encode и Decode. Если применять в команде параметр DisableNameChecking, то предупреждение выводиться не будет:

Import-Module sqlps –DisableNameChecking

Список загруженных модулей можно просмотреть следующей командой:

Get-Module

Список всех доступных модулей можно получить с помощью параметра ListAavailable:

Get-Module –ListAvailable

#2. Навигация с помощью модуля PowerShell для SQL Server

Модуль PowerShell для SQL Server предоставляет простой механизм навигации, аналогичный навигации по файловой системе в командной оболочке Windows. Вы можете использовать знакомые команды типа cd и dir для перемещения по папкам, как при переходе по папкам в окне командной строки. Заметим, что cd и dir на самом деле являются псевдонимами PowerShell для команд Set-Location и Get-ChildItem соответственно.

Вы можете использовать и такие команды как ren (Rename-Item) или del (Remove-Item) для выполнения необходимых действий с различными элементами в структуре папок. Ниже приведен пример, как с помощью PowerShell просмотреть список баз данных на сервере orportvm1. Не забудьте, что в вашей среде вместо orportvm1 необходимо указать имя вашего сервера.

PS SQLSERVER:> cd sqlorportvm1defaultdatabases
PS SQLSERVER:sqlorportvm1defaultdatabases> dir

Для получения списка объектов базы данных Adventurework2012 можно задействовать следующий код:

PS SQLSERVER:sqlorportvm1defaultdatabases> cd AdventureWorks2012
PS SQLSERVER:sqlorportvm1defaultdatabasesAdventureWorks2012> dir

Перечисление всех таблиц базы данных Adventurework2012 можно выполнить следующим образом:

PS SQLSERVER:sqlorportvm1defaultdatabasesAdventureWorks2012> cd tables
PS SQLSERVER:sqlorportvm1defaultdatabasesAdventureWorks2012tables> dir

#3. Выполнение команд T-SQL с помощью команды Invoke-SqlCmd

Вдобавок к возможности осуществлять навигацию по объектам баз данных команда Invoke-SqlCmd из модуля PowerShell для SQL Server также может выполнять команды T-SQL. Это можно увидеть в следующем примере:

PS SQLSERVER:sql> Invoke-Sqlcmd -Query «SELECT @@VERSION;»

С помощью команды Invoke-Sqlcmd можно выполнять запросы для выборки данных:

PS SQLSERVER:sql> Invoke-Sqlcmd -Query «SELECT * FROM HumanResources.Department;» –Database «AdventureWorks2012»

В запросы можно передавать переменные PowerShell, а также получать в эти переменные результаты. Следующий пример демонстрирует использование переменных PowerShell; здесь создается новая переменная с именем $HRName и значением Sales. Затем эта переменная используется в параметре –Query команды Invoke-Sqlcmd. Полученный результат запоминается в переменной $HRGroupName.

PS SQLSERVER:> $HRName = «Sales»
PS SQLSERVER:> $HRGroupName = Invoke-Sqlcmd -Query «SELECT GroupName from HumanResources.Department where Name = '$($HRName)'» –Database «AdventureWorks2012»

Содержимое полученной переменной можно просмотреть с помощью команды write-host:

PS SQLSERVER:> write-host $HRGroupName.GroupName

#4. Получение помощи

Одна из трудностей использования PowerShell заключается в том, что нужно знать, какие именно команды и параметры следует использовать. Изучение эффективного применения встроенных в PowerShell команд помощи является обязательным условием для использования различных команд. Во встроенной системе помощи (Help) можно найти все необходимые инструкции вместе с примерами применения. Для получения помощи по интересующему вас модулю используйте команду:

PS SQLSERVER:sql> Get-Help SQLServer

Команду Get-Help можно использовать как для изучения самих команд, так и для знакомства с примерами их применения:

PS SQLSERVER:sql> Get-Help Invoke-Sqlcmd –Examples