Запуск SQL Server PowerShell

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

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

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

  • 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 Management Studio, входящая в SQL Server 2008, поддерживает запуск сеансов Windows PowerShell из дерева обозревателя объектов. Версия агента SQL Server, входящая в SQL Server 2008, поддерживает шаги заданий Windows PowerShell.

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

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

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

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

Чтобы запустить функции SQL Server для Windows PowerShell, необходимо использовать клиентские компоненты SQL Server 2008. Поставщик SQL Server для Windows PowerShell может подключаться к экземплярам SQL Server 2008, SQL Server 2005 или SQL Server 2000. Наиболее ранняя версия SQL Server 2005, которую можно использовать, — версия с пакетом обновления 2 (SP2). Наиболее ранняя версия SQL Server 2000, которую можно использовать, — версия с пакетом обновления 4 (SP4). Когда поставщик SQL Server подключается к 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

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

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

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

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

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

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

Каждый шаг задания агента SQL Server для Windows PowerShell запускает процесс 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 is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


# Set mandatory variables for the SQL Server rovider
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.

  • Код объектов 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 is not installed."
}
else
{
    $item = Get-ItemProperty $sqlpsreg
    $sqlpsPath = [System.IO.Path]::GetDirectoryName($item.Path)
}


$assemblylist = 
"Microsoft.SqlServer.Smo",
"Microsoft.SqlServer.Dmf ",
"Microsoft.SqlServer.SqlWmiManagement ",
"Microsoft.SqlServer.ConnectionInfo ",
"Microsoft.SqlServer.SmoExtended ",
"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"


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

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

Журнал изменений

Обновленное содержимое

Удален раздел «Использование среды Windows PowerShell». Добавлены два новых раздела: «Добавление оснасток SQL Server к Windows PowerShell» и «Загрузка объектов SMO в Windows PowerShell».