Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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