Ich habe genug PowerShell-Kenntnisse, um mich auf den Weg zu machen, aber keine mit SQL Server. Kann mir bitte jemand die richtige Richtung zeigen, wie PowerShell verwendet wird, um Informationen zu Remote-SQL-Servern abzurufen und festzustellen, welche Datenbanken auf ihnen ausgeführt werden.
Vielen Dank für jede Hilfe.
Bearbeiten - Verwenden von SMO-Code
Ich habe versucht, diesen Code zusammenzusetzen, erhalte jedoch die folgende Fehlermeldung: Typ [Microsoft.SqlServer.Management.Smo.Server] kann nicht gefunden werden. Stellen Sie sicher, dass die Assembly mit diesem Typ geladen ist
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$sqlServer = New-Object("Microsoft.SqlServer.Management.Smo.Server") "MSQLULTDBS04"
foreach($sqlDatabase in $sqlServer.databases) {$sqlDatabase.name}
sql-server
powershell
database-design
Das Woo
quelle
quelle
Antworten:
Sie haben zwei Möglichkeiten, für die SQL Server Management Studio auf dem Host installiert sein muss, auf dem Sie die Befehle ausführen :
Ich neige zu Letzterem, weil es ein etwas einfacheres Format für grundlegende Aufgaben wie das Abrufen einer Liste von Objekten in einer Instanz enthält.
Mit SMO müssen Sie die entsprechenden Assemblys laden, mit denen Sie arbeiten möchten. In den meisten Fällen
Microsoft.sqlserver.management.smo.server
wird am häufigsten verwendet.Mit SQLPS müssen Sie wissen, mit welcher Version von SQL Server Sie arbeiten. SQL Server 2008 R2 (und R1) werden Sie
add-pssnapin *sql*
und SQL Server 2012 und darüber hinaus werden Sieimport-module SQLPS
.Nun zur Frage nach einer Liste von Datenbanken.
SQLPS-Methode
Das Obige gilt für eine benannte Standardinstanz. Sie würden "Standard" in Ihren Instanznamen ändern, wenn es sich um eine benannte Instanz handelt.
SMO-Methode
Jetzt kann der obige Code einfach in eine Funktion oder für jede Schleife eingeschlossen werden, mit der Sie problemlos mehrere Servernamen übergeben können.
Bearbeiten
Abhängig davon, welche Literatur Sie in PowerShell lesen, werden Sie feststellen, dass die meisten Leute, die sich Zeit nehmen, um ein Skript zu schreiben, die Zeit darauf verwenden, es wiederholbar zu machen. Dies geschieht entweder über eine Funktion (Grundstufe für mich) und dann über Module (fortgeschrittener, die ich noch nicht berührt habe).
Also für Ihren Beispielcode:
Ihre
foreach
Schleife wird nicht benötigt, um die Liste der Datenbanken auszugeben. Dies ist ein Objekt in SMO, das mehrere Eigenschaften enthält. Eine davon ist,name
und PowerShell gibt diese einfach im Standardformat aus, wie unten gezeigt: Ein Unterschied zwischen SMO und SQLPS besteht darin, dass SQLPS die Systemdatenbanken standardmäßig nicht ausgibt , SMO wird.Wenn Sie einen Blog-Beitrag in PowerShell-Profilen nachschlagen, müssen Sie häufig den Assembly-Befehl hinzufügen, damit er bei jedem Öffnen Ihres PowerShell-Befehls bereits verfügbar ist. Ich werde dann Funktionen hinzufügen, die im Grunde Befehle sind, die ich oft benutze, und zufällig eine für Datenbanken haben:
Sie können dies nach Ihren Wünschen ändern, aber wenn ich es mit meiner lokalen Instanz aufrufe, erhalte ich die folgende Ausgabe.
Ich werde weitermachen und Sie über etwas informieren, das ich auf die harte Tour herausgefunden habe. Mit SMO können Sie bis zu SQL Server 2014 eine Verbindung zu SQL Server 2000 herstellen. Jede Version von SQL Server kann jedoch variieren, je nachdem, wo sich bestimmte Eigenschaften befinden. Ich hatte eines Nachmittags ein Lerngespräch mit Jonathan Kehayias auf Twitter, aber ich kann mich nicht erinnern, nach welcher Immobilie ich gesucht habe. In diesen Situationen ist die .NET-Klassenbibliothek in MSDN für SMO Ihr Freund, da sie Ihnen dabei helfen kann, die gewünschten Eigenschaften zu finden.
quelle
Sobald Sie das SQLPS-Modul importiert haben, können Sie auch Invoke-SQLcmd verwenden , z
quelle