共用方式為


在 Windows PowerShell 中載入 SMO 元件

本主題描述如何在不使用 SQL Server PowerShell 提供者的 Windows PowerShell 腳本中載入 SQL Server 管理物件 (SMO) 元件。

開始之前

載入 SMO 元件的慣用機制是載入 sqlps 模組。 模組中包含的 SQL Server 提供者會自動載入 SMO 元件,並實作功能來擴充 PowerShell 腳本中 SMO 物件的實用性。

在某些情況下,您可能需要直接載入 SMO 元件:

  • 如果您的文稿在參考來自 SQL Server 嵌入式管理單元之提供者或 Cmdlet 的第一個命令之前參考 SMO 物件。

  • 您想要從另一種語言移植 SMO 程式代碼,例如 C# 或 Visual Basic,這不會使用提供者或 Cmdlet。

範例:載入 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