(0) exportieren Drucken
Alle erweitern

Verwenden des SQL Server PowerShell-Anbieters

Der SQL Server Windows PowerShell-Anbieter macht die Hierarchie von SQL Server-Objekten in Pfaden auf eine Weise verfügbar, die den Dateisystempfaden ähnelt. Mithilfe der Pfade können Sie Objekte finden und dann Methoden der SQL Server Management Object (SMO)-Modelle verwenden, um Aktionen an den Objekten auszuführen.

Produkte, deren Daten oder Objektmodelle in einer Hierarchie dargestellt werden können, verwenden Windows PowerShell-Anbieter, um die Hierarchien verfügbar zu machen. Die Hierarchie wird mithilfe einer Laufwerks- und Pfadstruktur verfügbar gemacht, die der für das Windows-Dateisystem verwendeten Laufwerks- und Pfadstruktur ähnelt.

Jeder Windows PowerShell-Anbieter implementiert ein oder mehrere Laufwerke. Jedes Laufwerk ist der Stammknoten einer Hierarchie verwandter Objekte. Der SQL Server-Anbieter implementiert ein Laufwerk mit der Bezeichnung SQLSERVER:. Das Laufwerk SQLSERVER: weist vier primäre Ordner auf. Jeder Ordner und seine Unterordner stellen den Satz von Objekten dar, auf die über ein SQL Server Management Object-Modell zugegriffen werden kann. Wenn sich Ihr Fokus auf einen Unterordner in einem Pfad, der mit einem dieser primären Ordner beginnt, richtet, können Sie die Methoden des zugeordneten Objektmodells verwenden, um für das von dem Knoten dargestellte Objekt Aktionen auszuführen. Die vom SQL Server 2008-Anbieter implementierten Windows PowerShell-Ordner werden in der folgenden Tabelle aufgelistet.

Ordner

Namespace des SQL Server-Objektmodells

Objekte

SQLSERVER:\SQL

Microsoft.SqlServer.Management.Smo

Microsoft.SqlServer.Management.Smo.Agent

Microsoft.SqlServer.Management.Smo.Broker

Microsoft.SqlServer.Management.Smo.Mail

Datenbankobjekte, wie Tabellen, Sichten und gespeicherte Prozeduren.

SQLSERVER:\SQLPolicy

Microsoft.SqlServer.Management.Dmf

Microsoft.SqlServer.Management.Facets

Richtlinienbasierte Verwaltungsobjekte, z. B. Richtlinien und Facets

SQLSERVER:\SQLRegistration

Microsoft.SqlServer.Management.RegisteredServers

Microsoft.SqlServer.Management.Smo.RegSvrEnum

Registrierte Serverobjekte, z. B. Servergruppen und registrierte Server

SQLSERVER:\DataCollection

Microsoft.SqlServer.Management.Collector

Datenauflister-Objekte, wie Auflistsätze und Konfigurationsspeicher

Sie können z. B. mit dem Ordner SQLSERVER:\SQL Pfade beginnen, die jedes vom SMO-Objektmodell unterstützte Objekt darstellen können. Der erste Teil eines SQLSERVER:\SQL-Pfads ist SQLSERVER:\SQL\ComputerName\InstanceName. Sie müssen einen Computernamen angeben. Sie können entweder "localhost" oder "(local)" für den lokalen Computer angeben. Sie müssen immer den Instanznamen angeben, auch für Standardinstanzen. Geben Sie für Standardinstanzen DEFAULT an. Die Knoten nach dem Instanznamen wechseln zwischen Objektklassen (wie Database oder View) und Objektnamen (wie AdventureWorks). Schemas werden nicht als Objektklassen dargestellt. Wenn Sie den Knoten für ein Objekt der höchsten Ebene in einem Schema angeben, wie beispielsweise eine Tabelle oder eine Sicht, müssen Sie den Objektnamen im Format Schemaname.Objektname angeben.

Dies ist der Pfad der Vendor-Tabelle im Purchasing-Schema der AdventureWorks-Datenbank in einer Standardinstanz von Database Engine (Datenbankmodul) auf dem lokalen Computer:

SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks\Tables\Purchasing.Vendor

Weitere Informationen zur SMO-Objektmodellhierarchie finden Sie unter Diagramm des SMO-Objektmodells.

Objektklassenknoten in einem Pfad werden im zugeordneten Objektmodell einer Auflistungsklasse zugeordnet. Objektnamenknoten werden wie in der folgenden Tabelle einer Objektklasse im zugeordneten Objektmodell zugeordnet.

Pfad

SMO-Klasse

SQLSERVER:\SQL\MyComputer\DEFAULT\Databases

DatabaseCollection

SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks

Database

Immer, wenn Sie in einem Pfad auf eine Instanz von Database Engine (Datenbankmodul) verweisen, verwendet der SQL Server-Anbieter SMO, um eine Windows-Authentifizierungsverbindung mit der Instanz zu öffnen. Die Verbindung wird mithilfe der Anmeldedaten des Windows-Kontos hergestellt, das die Windows PowerShell-Sitzung ausführt. Der SQL Server-Anbieter verwendet keine SQL Server-Authentifizierung.

Windows PowerShell implementiert Cmdlets, um in Anbieterhierarchien zu navigieren und grundlegende Vorgänge an dem aktuellen Objekt auszuführen. Da die Cmdlets häufig verwendet werden, haben sie kurze, kanonische Aliase. Es gibt auch einen Satz von Aliasen, der die Cmdlets ähnlichen Eingabeaufforderungsbefehlen zuordnet, und einen weiteren Satz für UNIX-Umgebungsbefehle.

Der SQL Server-Anbieter implementiert eine Teilmenge der Anbieter-Cmdlets, wie in der folgenden Tabelle aufgeführt.

Cmdlet

Kanonischer Alias

Cmd-Alias

UNIX-Shell-Alias

Beschreibung

Get-Location

gl

pwd

pwd

Ruft den aktuellen Knoten ab.

Set-Location

sl

cd, chdir

cd, chdir

Ändert den aktuellen Knoten.

Get-ChildItem

gci

dir

ls

Listet die am aktuellen Knoten gespeicherten Objekte auf.

Get-Item

gi

Gibt die Eigenschaften des aktuellen Elements zurück.

Move-Item

mi

move

mv

Verschiebt ein Objekt.

Rename-Item

rni

rn

ren

Benennt ein Objekt um.

Remove-Item

ri

del, rd

rm, rmdir

Entfernt ein Objekt.

Sie können beispielsweise einen der folgenden Sätze von Cmdlets oder Aliasen verwenden, um eine Auflistung der Ihnen zur Verfügung stehenden SQL Server-Instanzen abzurufen, indem Sie zum SQLSERVER:\SQL-Ordner navigieren und die Liste der untergeordneten Elemente des Ordners abfragen:

  • Mit vollständigen Cmdlet-Namen:

    Set-Location SQLSERVER:\SQL
    Get-ChildItem
    
  • Mit kanonischen Aliasen:

    sl SQLSERVER:\SQL
    gci
    
  • Mit cmd-Aliasen:

    cd SQLSERVER:\SQL
    dir
    
  • Mit UNIX-Umgebungsaliasen:

    cd SQLSERVER:\SQL
    ls
    
    Wichtiger HinweisWichtig

    Einige SQL Server-Bezeichner (Objektnamen) enthalten Zeichen, die Windows PowerShell in Pfadnamen nicht unterstützt. Weitere Informationen zum Verwenden von Namen, die diese Zeichen enthalten, finden Sie unter Verwenden von SQL Server-Bezeichnern in PowerShell.

Die von Get-ChildItem (oder den zugehörigen Aliasen dir und ls) zurückgegebenen Informationen sind von Ihrer Position in einem SQLSERVER:-Pfad abhängig.

Pfadposition

Get-ChildItem-Ergebnisse

SQLSERVER:\SQL

Gibt den Namen des lokalen Computers zurück. Wenn Sie die Verbindung mit Instanzen von Database Engine (Datenbankmodul) auf anderen Computern mithilfe von SMO oder WMI hergestellt haben, werden diese Computer ebenfalls aufgelistet.

SQLSERVER:\SQL\ComputerName

Die Liste der Instanzen von Database Engine (Datenbankmodul) auf dem Computer.

SQLSERVER:\SQL\ComputerName\InstanceName

Die Liste von Objekttypen der höchsten Ebene in der Instanz, wie Endpunkte, Zertifikate und Datenbanken.

Objektklassenknoten, z. B. Datenbanken

Die Liste der Objekte dieses Typs, z. B. die Liste von Datenbanken: master, model, AdventureWorks.

Objektnamenknoten, z. B. AdventureWorks

Die Liste von im Objekt enthaltenen Objekttypen. Zum Beispiel würden in einer Datenbank Objekttypen wie Tabellen und Sichten aufgeführt werden.

Standardmäßig listet Get-ChildItem keine Systemobjekte auf. Verwenden Sie den Parameter Force, um Systemobjekte anzuzeigen, wie z. B. die Objekte im sys-Schema.

In diesem Beispiel werden der lokale Computer und alle Computer, mit denen eine SMO- oder WMI-Verbindung besteht, aufgelistet:

Set-Location SQLSERVER:\SQL
Get-ChildItem

In diesem Beispiel werden die Instanzen von Database Engine (Datenbankmodul) auf dem lokalen Computer aufgeführt:

Set-Location SQLSERVER:\SQL\localhost
Get-ChildItem

In diesem Beispiel werden die Hauptklassen von in einer Standardinstanz von Database Engine (Datenbankmodul) verfügbaren Objekten aufgeführt. Die Liste umfasst Namen wie Endpunkte, Zertifikate und Datenbanken:

Set-Location SQLSERVER:\SQL\localhost\DEFAULT
Get-ChildItem

In diesem Beispiel werden die in einer Standardinstanz des Datenbankmoduls verfügbaren Datenbanken aufgeführt. Der Parameter Force wird verwendet, um Systemdatenbanken wie master und model einzuschließen:

Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases
Get-ChildItem -force

Nachdem Sie zu einem Knoten in einem Windows PowerShell-Pfad navigiert sind, können Sie zwei Arten von Aktionen ausführen:

  • Sie können Windows PowerShell-Cmdlets ausführen, die Vorgänge an Knoten durchführen, z. B. Rename-Item.

  • Sie können die Methoden vom zugeordneten SQL Server Management Object-Modell aufrufen, z. B. SMO. Wenn Sie beispielsweise zum Knoten Databases in einem Pfad navigieren, können Sie die Methoden und Eigenschaften der Database-Klasse verwenden.

Der SQL Server-Anbieter wird zum Verwalten der Objekte in einer Instanz von Database Engine (Datenbankmodul) verwendet. Er wird nicht verwendet, um mit den Daten in Datenbanken zu arbeiten. Wenn Sie zu einer Tabelle oder einer Sicht navigiert sind, können Sie den Anbieter nicht dazu verwenden, Daten auszuwählen, einzufügen, zu aktualisieren oder zu löschen. Verwenden Sie das Cmdlet Invoke-Sqlcmd, um Daten in Tabellen und Sichten aus der Windows PowerShell-Umgebung abzufragen oder zu ändern. Weitere Informationen finden Sie unter Verwenden des Invoke-Sqlcmd-Cmdlets.

Auflisten von Methoden und Eigenschaften

Sie können das Cmdlet Get-Member verwenden, um die für bestimmte Objekte oder Objektklassen verfügbaren Methoden und Eigenschaften anzuzeigen.

In diesem Beispiel wird gezeigt, wie eine Liste von Methoden der Database-Klasse von SMO angezeigt wird:

[Microsoft.SqlServer.Management.SMO.Database] | Get-Member -Type Methods

In diesem Beispiel wird eine Windows PowerShell-Variable auf die Database-Klasse von SMO festgelegt und werden die Eigenschaften aufgeführt:

$MyDBVar = New-Object Microsoft.SqlServer.Management.SMO.Database
$MyDBVar | Get-Member -Type Properties

Sie können auch Get-Member verwenden, um die dem Endknoten eines Windows PowerShell-Pfads zugeordneten Methoden und Eigenschaften aufzulisten.

In diesem Beispiel wird zum Knoten Databases in einem SQLSERVER:-Pfad navigiert, und die Auflistungseigenschaften werden aufgeführt:

Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases
Get-Item . | Get-Member -Type Properties

In diesem Beispiel wird zum Knoten AdventureWorks in einem SQLSERVER:-Pfad navigiert, und die Objekteigenschaften werden aufgeführt:

Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks
Get-Item . | Get-Member -Type Properties

Verwenden von Methoden und Eigenschaften

Sie können auf SMO-Eigenschaften in Windows PowerShell-Befehlen verweisen. In diesem Beispiel wird die SMO-Schemaeigenschaft verwendet, um eine Liste der Tabellen aus dem Schema Sales in AdventureWorks abzurufen:

Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks\Tables
Get-ChildItem | where {$_.Schema -eq "Sales"}

In diesem Beispiel wird die SMO-Methode Script verwendet, um ein Skript zu erstellen, das die CREATE VIEW-Anweisungen enthält, die Sie zur erneuten Erstellung der Sichten in AdventureWorks benötigen:

Remove-Item C:\PowerShell\CreateViews.sql
Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks\Views
foreach ($Item in Get-ChildItem) { $Item.Script() | Out-File -Filepath C:\PowerShell\CreateViews.sql -append }

In diesem Beispiel wird die SMO-Methode Create verwendet, um eine Datenbank zu erstellen, und dann die Eigenschaft State, um zu zeigen, ob die Datenbank existiert:

Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases
$MyDBVar = New-Object Microsoft.SqlServer.Management.SMO.Database
$MyDBVar.Parent = (Get-Item ..)
$MyDBVar.Name = "NewDB"
$MyDBVar.Create()
$MyDBVar.State

Mit Windows PowerShell können Benutzer virtuelle Laufwerke definieren, die als Windows PowerShell- oder PS-Laufwerke bezeichnet werden. Diese werden über die Startknoten eines Pfads zugeordnet. Sie werden in der Regel verwendet, um Pfade, die häufig eingegeben werden, zu kürzen. SQLSERVER: Pfade können lang werden, somit viel Platz im Windows PowerShell-Fenster einnehmen und umfangreiche Eingaben erfordern. Wenn Sie vorhaben, viel mit einem bestimmten Pfadknoten zu arbeiten, können Sie ein benutzerdefiniertes Windows PowerShell-Laufwerk definieren, das dem Knoten zugeordnet ist. Wenn Sie z. B. viel in der Datenbank AdventureWorks arbeiten, können Sie ein Laufwerk namens AWDB: erstellen:

New-PSDrive -Name AWDB -Root SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks

Sie können dann das Laufwerk AWDB: dazu verwenden, den Pfad zu AdventureWorks-Objekten wie der Tabelle Purchasing.Vendor zu verkürzen:

Set-Location AWDB:\Tables\Purchasing.Vendor

Der SQL Server-Anbieter verwendet standardmäßig das Windows-Konto, unter dem er ausgeführt wird, um eine Windows-Authentifizierungsverbindung mit der Database Engine (Datenbankmodul) herzustellen. Um eine Verbindung mit der SQL Server-Authentifizierung herzustellen, müssen Sie die SQL Server-Anmeldeinformationen einem virtuellen Laufwerk zuordnen. Anschließend können Sie mithilfe des Befehls zum Ändern des Verzeichnisses (cd) eine Verbindung mit diesem Laufwerk herstellen. In Windows PowerShell können Sicherheitsanmeldeinformationen nur virtuellen Laufwerken zugeordnet werden.

Dieses Skript erstellt eine Funktion mit dem Namen sqldrive, mit der Sie ein virtuelles Laufwerk erstellen können, das mit dem angegebenen Anmeldenamen für die SQL Server-Authentifizierung und der angegebenen Instanz verknüpft ist.

function sqldrive
{
    param( [string]$name, [string]$login = "MyLogin", [string]$root = "SQLSERVER:\SQL\MyComputer\MyInstance" )
    $pwd = read-host -AsSecureString -Prompt "Password"
    $cred = new-object System.Management.Automation.PSCredential -argumentlist $login,$pwd
    New-PSDrive $name -PSProvider SqlServer -Root $root -Credential $cred -Scope 1
}

Sie können dann ein virtuelles Laufwerk mit dem Namen SQLAuth: erstellen, indem Sie folgenden Befehl ausführen:

sqldrive SQLAuth

Die Funktion sqldrive fordert Sie auf, das Kennwort für Ihren Anmeldenamen einzugeben, das bei der Eingabe maskiert wird. Wenn Sie anschließend den Befehl zum Ändern eines Verzeichnisses (cd) verwenden, um über das SQLAuth:-Laufwerk eine Verbindung mit einem Pfad herzustellen, werden stets alle Vorgänge mithilfe der Anmeldeinformationen für die SQL Server-Authentifizierung ausgeführt, die Sie beim Erstellen des Laufwerks angegeben haben.

Zusätzlich zu den Namespaces des SQL Server Management Object-Modells, die mit den Ordnern \SQL, \SQLPolicy und \SQLRegistration verknüpft sind, können Sie auch Klassen im Namespace Microsoft.SqlServer.Management.Smo.Wmi verwenden. Die häufigste Verwendung dieses Namespaces besteht darin, den Status der Dienste, die jede Instanz von Database Engine (Datenbankmodul) oder einen Richtlinienspeicher implementieren, abzufragen und zu verwalten.

Dieses Beispiel zeigt, wie der Dienst, der eine Standardinstanz von Database Engine (Datenbankmodul) ausführt, mithilfe der Klasse ManagedComputer gestartet und beendet werden kann.

# Get a reference to the ManagedComputer class.
cd SQLSERVER:\SQL\localhost
$Wmi = (get-item .).ManagedComputer
# Display the object properties.
$Wmi
# Get a reference to the default instance of the Database Engine.
$DfltInstance = $Wmi.Services["MSSQLSERVER"]
# Display the state of the service.
$DfltInstance
# Stop the service.
$DfltInstance.Stop(); write-host "Stopped"
# Refresh the cache and look at the state.
$DfltInstance.Refresh(); $DfltInstance
# Start the service again.
$DfltInstance.Start(); write-host "Started"
HinweisHinweis

Um die Klassen in diesem Namespace auf Remotecomputern zu verwenden, müssen Sie Ihre Windows-Firewall so konfigurieren, dass WMI DCOM-Verbindungen zugelassen werden. Weitere Informationen finden Sie unter Konfigurieren der Windows-Firewall für den SQL Server-Zugriff.

Die Windows PowerShell-Befehlszeilenergänzung reduziert den Tippaufwand. Sobald Sie einen Teil eines Pfad- oder Cmdlet-Namens eingegeben haben, können Sie die TAB-TASTE drücken, um eine Liste der Elemente anzuzeigen, deren Namen mit dem bereits eingegebenen Teil übereinstimmen. Sie können dann das gewünschte Element aus der Liste auswählen, ohne den Rest des Namens eingeben zu müssen.

Wenn Sie in einer Datenbank arbeiten, die zahlreiche Objekte enthält, können die Listen der Befehlszeilenergänzung sehr umfangreich werden. Einige SQL Server-Objekttypen, z. B. Sichten, verfügen außerdem über zahlreiche Systemobjekte.

Die SQL Server-Snap-Ins führen drei Systemvariablen ein, mit denen Sie die von der Befehlszeilenergänzung und Get-ChildItem präsentierte Informationsmenge steuern können.

$SqlServerMaximumTabCompletion = n

Gibt die maximale Anzahl der Objekte an, die in der Befehlszeilenergänzungsliste enthalten sein sollen. Wenn Sie die TAB-TASTE an einem Pfadknoten betätigen, der mehr als n Objekte aufweist, wird die Befehlszeilenergänzungsliste bei n abgeschnitten. n ist eine ganze Zahl. 0 ist die Standardeinstellung und bedeutet, dass die Anzahl der aufgeführten Objekte nicht begrenzt ist.

$SqlServerMaximumChildItems = n

Gibt die maximale Anzahl der von Get-ChildItem angezeigten Objekte an. Wenn Sie Get-ChildItem an einem Pfadknoten ausführen, der mehr als n Objekte aufweist, wird die Befehlszeilenergänzungsliste bei n abgeschnitten. n ist eine ganze Zahl. 0 ist die Standardeinstellung und bedeutet, dass die Anzahl der aufgeführten Objekte nicht begrenzt ist.

$SqlServerIncludeSystemObjects = { $True | $False }

Wenn $True, werden Systemobjekte durch Befehlszeilenergänzung und Get-ChildItem angezeigt. Wenn $False, werden keine Systemobjekte angezeigt. Die Standardeinstellung ist $False.

Im folgenden Beispiel werden alle drei Variablen festgelegt und ihre Einstellungen aufgeführt:

$SqlServerMaximumTabCompletion = 20
$SqlServerMaximumChildItems = 10
$SqlServerIncludeSystemObjects = $False
dir variable:sqlserver*

Aktualisierter Inhalt

Behobene Syntaxfehler in Codeabschnitten, die auf Smo.Database verweisen. Entfernte Verweise auf das SQL:-Laufwerk, das durch das SQLSERVER:-Laufwerk ersetzt wurde.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft