Загрузка сборок SMO в Windows PowerShell

В этом разделе описывается загрузка сборок объектов управления SQL Server (SMO) в скриптах Windows PowerShell, которые не используют поставщика SQL Server PowerShell.

Перед началом работы

Предпочтительный механизм загрузки сборок SMO — загрузка sqlps модуля. Поставщик SQL Server, включенный в модуль, автоматически загружает сборки SMO, а также реализует функции, которые расширяют полезность объектов SMO в скриптах PowerShell.

Существует два случая, когда может потребоваться загрузить сборки SMO напрямую:

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

  • Вы хотите перенести код SMO из другого языка, например C# или Visual Basic, который не использует поставщика или командлеты.

Пример. Загрузка объектов управления SQL Server

Следующий код загружает сборки 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  

См. также

SQL Server PowerShell