Freigeben über


Laden der SMO-Assemblys in Windows PowerShell

In diesem Artikel wird beschrieben, wie die Assemblys von SQL Server Management Objects (SMO) in Windows PowerShell-Skripts geladen werden, die nicht den SQL Server PowerShell-Anbieter verwenden.

Hinweis

Es gibt zwei SQL Server PowerShell-Module: SqlServer und SQLPS.

Das SqlServer-Modul ist das zu verwendende aktuelle PowerShell-Modul.

Das SQLPS-Modul ist zwar in der SQL Server-Installation (für die Abwärtskompatibilität) enthalten, wird jedoch nicht mehr aktualisiert.

Das SqlServer-Modul enthält aktualisierte Versionen der Cmdlets in SQLPS sowie neue Cmdlets zur Unterstützung der neuesten SQL-Funktionen.

Installieren Sie das SqlServer-Modul aus dem PowerShell-Katalog.

Weitere Informationen finden Sie unter SQL Server PowerShell.

Der bevorzugte Mechanismus zum Laden der SMO-Assemblys besteht im Laden des SqlServer-Moduls. Der im Modul enthaltene Anbieter lädt die SMO-Assemblys automatisch und implementiert außerdem Funktionen, die die Nützlichkeit der SMO-Objekte in PowerShell-Skripts erweitern.

Es gibt zwei Fälle, in denen Sie die SMO-Assemblys möglicherweise direkt laden müssen:

  • Das Skript verweist vor dem ersten Befehl, der auf den Anbieter oder die Cmdlets der Snap-Ins verweist, auf ein SMO-Objekt.

  • Sie möchten SMO-Code portieren, der in einer anderen Sprache geschrieben wurde, die weder den Anbieter noch Cmdlets verwendet (z. B. C# oder Visual Basic).

Beispiel: Laden von SQL Server Management Objects

Mit folgendem Code werden die SMO-Assemblys geladen:

# 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