С MS SQL Server 2008 и выше устанавливается модуль SQLPS для PowerShell. Он предоставляет несколько командлетов для работы с SQL и провайдер SqIServer для PowerShell- подсистемы PSDrive, позволяющей работать с различными объектами (в данном случае с MS SQL Server) как с файловой системой. Сам SQLPS основывается на управляющих объектах SQL Server (SMO), работу с которыми мы опишем в следующем разделе.


КомандлетInvoke-Sqlcmd

Аналог штатной утилиты sqlcmd. exe для выполнения запросов к MS SQL Server. Его стоит применять, если имеются уже готовые SQL-скрипты, которые нужно запускать из PowerShell.

Invoke-Sqlcmd -Query "SELECT name FROM master..sysdatabases" — Serverlnstance "ServerName"

Подсистема PSDrive

Один из самых интересных вариантов, так как он позволяет применять стандартные командлеты PowerShell для получения любых данных об объектах MS SQL Server.

Get-Childltem SqIServer:SQLServerNameDefaultDatabases

А при использовании коротких псевдонимов команд получение списка баз данных на сервере аналогично выводу списка файлов в каталоге: cd SqlServer:SQLServerNameDefaultDatabases dir

Однако у этих двух способов есть свои недостатки, вытекающие из реализации модуля SQLPS. Во-первых, он появился только в MS SQL Server 2008 и выше. А во-вторых, настоящим модулем, работать с которым можно из любой сессии PowerShell, он стал только в MS SQL Server 2012. В предыдущей же версии SQLPS был выполнен как мини – оболочка — особая сборка PowerShell с именем SQLPS. exe; доступ к командлетам и провайдеру SqlServer для PSDrive был только из нее.

Для того чтобы использовать SQLPS отдельно от SQL Server, необходимо скачать и установить следующие компоненты из пакета дополнительных компонентов SQL Server 2012 [6]:

> Microsoft System CLR Types for Microsoft SQL Server 2012;

> Microsoft SQL Server 2012 Shared Management Objects;

> Microsoft Windows PowerShell Extensions for Microsoft SQL Server 2012.

> SQL Server Management Objects (SMO) — набор объектов для программирования всех аспектов управления MS SQL Server. Объект SMO является сборкой. NET и может быть легко использован в PowerShell.

[System. Reflection. Assembly]::LoadWithPartialName

(‘Microsoft. SqlServer. SMO’)

$SqlSmo = New-Object (‘Microsoft. SqlServer. Management.

SMO. Server’) ‘ServerNameInstanceName’

$SqlSmo. Databases

Доступ к SMO можно получить, загрузив. NET сборку «Microsoft. SqlServer. SMO» и создав новый объект. Далее к его свойствам и методам можно обращаться из PowerShell. По уровню абстракции SMO находятся где-то между прямым выполнением SQL-запросов и подсистемой PSDrive.

Основным преимуществом SMO является то, что они доступны начиная с версии MS SQL Server 2005 и выше, не требуют установки дополнительных библиотек и навыков написания SQL-скриптов. Поэтому для работы с MS SQL Server в описываемом скрипте были выбраны именно SMO, поставляемые вместе с любой редакцией MS SQL Server 2005 и выше.

В случае если необходимо использовать Server Management Objects на компьютере, где не установлен SQL Server или требуется более новая версия, нужно скачать и установить компоненты из пакета дополнительных компонентов [6]:

> Microsoft System CLR Types for Microsoft SQL Server 2012

> Microsoft SQL Server 2012 Shared Management Objects

0 ответы

Ответить

Хотите присоединиться к обсуждению?
Не стесняйтесь вносить свой вклад!

Добавить комментарий