Запуск SQL Server PowerShell

SQL Server устанавливает среду Windows PowerShell и набор оснасток SQL Server, предоставляющих доступ к функциям SQL Server в Windows PowerShell. Затем можно создавать скрипты Windows PowerShell, которые работают с объектами SQL Server. Эти скрипты можно выполнять в среде Windows PowerShell, в среде Среда SQL Server Management Studio или в качестве заданий агента SQL Server.

Установка компонентов поддержки SQL Server PowerShell

Программное обеспечение, необходимое для запуска скриптов Windows PowerShell, устанавливается с помощью программы установки SQL Server. Начиная с SQL Server 2008, программа установки устанавливает следующие компоненты Windows PowerShell, если выбрана установка клиентского программного обеспечения или узлов служб Database Services:

  • Windows PowerShell 1.0, если среда Windows PowerShell еще не установлена на компьютере.

  • Оснастки SQL Server. Оснастки представляют собой DLL-файлы, в которых реализованы следующие два типа компонентов поддержки Windows PowerShell для SQL Server.

    • Набор командлетов SQL Server. Командлеты — это команды, выполняющие определенные действия. Например, командлет Invoke-Sqlcmd запускает скрипт Transact-SQL или XQuery, который также можно выполнить при помощи программы sqlcmd, а командлет Invoke-PolicyEvaluation сообщает, соответствуют ли объекты SQL Server схемам управления на основе политик.

    • Поставщик SQL Server. Поставщик позволяет перемещаться по иерархии объектов SQL Server, используя путь, похожий на путь файловой системы. Каждый объект соответствует классу из моделей управляющих объектов SQL Server. Для работы с объектами можно использовать методы и свойства соответствующего класса. Например, если с помощью команды cd перейти к объекту Databases в пути, можно использовать методы и свойства класса Microsoft.SqlServer.Management.SMO.Database.

  • Программа sqlps, которая используется для запуска сеансов Windows PowerShell, в которых участвуют оснастки SQL Server.

Начиная с SQL Server 2008, среда Среда SQL Server Management Studio поддерживает запуск сеансов Windows PowerShell из дерева обозревателя объектов. Кроме того, начиная с SQL Server 2008, агент SQL Server поддерживает шаги заданий Windows PowerShell.

Если Windows PowerShell удаляется после завершения программы установки, то функции SQL Server для Windows PowerShell не будут работать. Пользователи Windows могут удалить Windows PowerShell, и кроме того, удаление Windows PowerShell может быть необходимо для некоторых вариантов обновления ОС Windows. Если приложение PowerShell было удалено, но возникла необходимость в использовании функций SQL Server PowerShell, то необходимо выполнить одно из следующих действий.

  • Вручную загрузить и повторно установить Windows PowerShell 1.0 из центра загрузки Майкрософт. Инструкции по загрузке размещены на веб-сайте Windows Server 2003.

  • Если используется Windows Server 2008, то среда Windows PowerShell 1.0 установлена в операционной системе, но по умолчанию отключена. Можно включить Windows PowerShell из Windows Server 2008.

Поддерживаемые версии SQL Server

Запустить Windows PowerShell можно с помощью клиентских компонентов SQL Server 2008. Windows PowerShell может подключаться к экземплярам SQL Server 2000 или более поздних версий. Наиболее ранняя версия SQL Server 2005, которую можно использовать, — версия с пакетом обновления 2 (SP2). Наиболее ранняя версия SQL Server 2000, которую можно использовать, — версия с пакетом обновления 4 (SP4). При подключении оболочки Windows PowerShell к SQL Server 2005 или SQL Server 2000 ее функциональность будет ограничена той, которая доступна в этих версиях SQL Server.

Использование программы sqlps

Программа sqlps создает среду Windows PowerShell, а затем загружает и регистрирует оснастки SQL Server. Программа sqlps предназначена, чтобы:

  • Вводить команды Windows PowerShell в интерактивном режиме.

  • Запускать файлы скриптов Windows PowerShell.

  • Запускать командлеты служб SQL Server.

  • Использовать пути поставщика служб SQL Server для передвижения по иерархии объектов среды служб SQL Server.

По умолчанию для программы sqlps политика выполнения скриптов имеет значение Ограничено, что запрещает выполнение любых скриптов Windows PowerShell. Командлет Set-ExecutionPolicy обеспечивает возможность запуска как подписанных, так и любых других скриптов. Следует выполнять только скрипты, полученные из доверенных источников, а также защищать все входные и выходные файлы, установив необходимые разрешения NTFS. Дополнительные сведения о включении скриптов Windows PowerShell см. в разделе Выполнение скриптов Windows PowerShell.

Дополнительные сведения см. в разделе Программа sqlps.

Использование Windows PowerShell в среде SQL Server Management Studio

Сеанс PowerShell можно запустить в среде Среда SQL Server Management Studio, в обозревателе объектов щелкнув правой кнопкой мыши объект и выбрав в контекстном меню команду Запустить PowerShell. После этого среда Среда SQL Server Management Studio запускает сеанс Windows PowerShell, в котором загружаются и зарегистрируются оснастки SQL Server для PowerShell. Путем для сеанса становится расположение объекта, выбранного правой кнопкой мыши в обозревателе объектов. Например, если щелкнуть правой кнопкой мыши объект базы данных База данных AdventureWorks2008R2 в обозревателе объектов, а затем выбрать команду Запустить PowerShell, то путь Windows PowerShell будет иметь следующий вид:

SQLSERVER:\SQL\MyComputer\MyInstance\Databases\AdventureWorks2008R2>

Использование Windows PowerShell в шагах заданий агента SQL Server

Существует несколько типов шагов заданий агента SQL Server. Каждый тип связан с некоторой подсистемой, в которой реализуется определенная среда, например агент репликации или среда командной строки. Подсистема агента SQL Server для Windows PowerShell поддерживает шаги заданий, которые выполняют скрипты Windows PowerShell. Можно создавать скрипты Windows PowerShell, а затем использовать агент SQL Server, чтобы включить скрипты в задания, которые выполняются в запланированное время или в ответ на события SQL Server. Подсистема агента SQL Server загружает и регистрирует оснастки SQL Server PowerShell, обеспечивая возможность запуска скриптов Windows PowerShell.

Дополнительные сведения см. в разделе Подсистемы агента SQL Server.

ПредупреждениеВнимание!

Каждый шаг задания агента SQL Serverзапускает процесс sqlps, который потребляет приблизительно 20 МБ памяти. Одновременный запуск большого числа шагов задания Windows PowerShell может иметь негативное влияние на производительность.

Добавление оснасток SQL Server к Windows PowerShell

Программа sqlps является мини-оболочкой Windows PowerShell. У мини-оболочек имеются определенные ограничения. Например, они создаются для загрузки в одну или несколько оснасток Windows PowerShell, но пользователи и скрипты не могут добавлять другие оснастки. Если требуются функциональные возможности, не поддерживаемые мини-оболочкой, например работа как с оснастками SQL Server, так и с оснастками другого продукта, то можно добавить оснастки SQL Server непосредственно в среду Windows PowerShell.

Вставьте следующий код в «Блокнот» и сохраните его на компьютере как файл скрипта, например C:\MyFolder\InitializeSQLProvider.ps1.

# Add the SQL Server Provider.

$ErrorActionPreference = "Stop"

$sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps"

if (Get-ChildItem $sqlpsreg -ErrorAction "SilentlyContinue")
{
    throw "SQL Server Provider for Windows PowerShell is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


# Set mandatory variables for the SQL Server provider
Set-Variable -scope Global -name SqlServerMaximumChildItems -Value 0
Set-Variable -scope Global -name SqlServerConnectionTimeout -Value 30
Set-Variable -scope Global -name SqlServerIncludeSystemObjects -Value $false
Set-Variable -scope Global -name SqlServerMaximumTabCompletion -Value 1000

# Load the snapins, type data, format data
Push-Location
cd $sqlpsPath
Add-PSSnapin SqlServerCmdletSnapin100
Add-PSSnapin SqlServerProviderSnapin100
Update-TypeData -PrependPath SQLProvider.Types.ps1xml 
update-FormatData -prependpath SQLProvider.Format.ps1xml 
Pop-Location

Затем этот скрипт можно использовать для запуска среды Windows PowerShell, в которую загружены оснастки SQL Server, с помощью следующей команды:

PowerShell -NoExit -Command "C:\MyFolder\InitializeSQLProvider.ps1"

Эту команду можно выполнить в командной строке при помощи ярлыка на рабочем столе или из диалогового окна Выполнить в меню Пуск. По умолчанию Windows PowerShell работает в режиме Ограниченный, который не поддерживает выполнение скриптов. Дополнительные сведения о включении скриптов Windows PowerShell см. в разделе Выполнение скриптов Windows PowerShell.

Загрузка объектов SMO в Windows PowerShell

Поставщик SQL Server автоматически загружает сборки объектов SMO. В двух следующих случаях, возможно, понадобится загрузить сборки объектов SMO напрямую.

  • Если скрипт ссылается на объект SMO перед первой командой, ссылающейся на поставщика, или командлетами из оснасток SQL Server PowerShell.

  • Код объектов SMO переносится из другого языка, например C# или VB.Net, который не использует этот поставщик или командлеты.

Следующий код загружает сборки объектов SMO:

# Loads the SQL Server Management Objects (SMO)

$ErrorActionPreference = "Stop"

$sqlpsreg="HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.SqlServer.Management.PowerShell.sqlps"

if (Get-ChildItem $sqlpsreg -ErrorAction "SilentlyContinue")
{
    throw "SQL Server Provider for Windows PowerShell is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


$assemblylist = 
"Microsoft.SqlServer.Management.Common",
"Microsoft.SqlServer.Smo",
"Microsoft.SqlServer.Dmf ",
"Microsoft.SqlServer.Instapi ",
"Microsoft.SqlServer.SqlWmiManagement ",
"Microsoft.SqlServer.ConnectionInfo ",
"Microsoft.SqlServer.SmoExtended ",
"Microsoft.SqlServer.SqlTDiagM ",
"Microsoft.SqlServer.SString ",
"Microsoft.SqlServer.Management.RegisteredServers ",
"Microsoft.SqlServer.Management.Sdk.Sfc ",
"Microsoft.SqlServer.SqlEnum ",
"Microsoft.SqlServer.RegSvrEnum ",
"Microsoft.SqlServer.WmiEnum ",
"Microsoft.SqlServer.ServiceBrokerEnum ",
"Microsoft.SqlServer.ConnectionInfoExtended ",
"Microsoft.SqlServer.Management.Collector ",
"Microsoft.SqlServer.Management.CollectorEnum",
"Microsoft.SqlServer.Management.Dac",
"Microsoft.SqlServer.Management.DacEnum",
"Microsoft.SqlServer.Management.Utility"


foreach ($asm in $assemblylist)
{
    $asm = [Reflection.Assembly]::LoadWithPartialName($asm)
}

Push-Location
cd $sqlpsPath
update-FormatData -prependpath SQLProvider.Format.ps1xml 
Pop-Location