この記事では、SQL Server PowerShell プロバイダーを使用しない Windows PowerShell スクリプトに SQL Server 管理オブジェクト (SMO) アセンブリを読み込む方法について説明します。
注
SQL Server PowerShell モジュールには SqlServer と SQLPS の 2 つがあります。
SqlServer モジュールは、使用する現在の PowerShell モジュールです。
SQLPS モジュールは、(後方互換性のため) SQL Server のインストールに含まれていますが、今後更新されることはありません。
SqlServer モジュールには、SQLPS のコマンドレットの更新バージョンに加え、最新の SQL 機能をサポートする新しいコマンドレットが含まれています。
PowerShell ギャラリーから SqlServer モジュールをインストールします。
詳細については、 SQL Server PowerShell を参照してください。
SMO アセンブリを読み込むための推奨メカニズムは、SqlServer モジュールを読み込むことです。 モジュールに含まれている SQL Server プロバイダーは、自動的に SMO アセンブリを読み込み、PowerShell スクリプトでの SMO オブジェクトの実用性を拡張する機能も実装します。
SMO アセンブリを直接読み込む必要がある場合は、次の 2 つがあります。
スクリプトが、プロバイダーを参照する最初のコマンドまたは SQL Server スナップインのコマンドレットより先に SMO オブジェクトを参照する場合。
プロバイダーまたはコマンドレットを使用しない別の言語 (C#、Visual Basic など) から SMO コードを移植する場合。
例: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