Команды 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