Lesezeit
3 Minuten
Seite 2 - Einführung in die PowerShell (4)
Sie müssen nicht den ganzen Namen eines Cmdlet-Parameters angeben. Es genügen so viele Zeichen des Namens, bis dieser eindeutig von den anderen Parametern unterschieden werden kann, die das Cmdlet unterstützt. Ein Beispiel dafür lautet:

Bild 2: Auch auf SQL-Tabellen haben Sie in der PowerShell Zugriff.
Mit Get-Help SQLServer erhalten Sie eine Hilfe zu den speziellen SQL-Server-Befehlen in der PowerShell. Möchten Sie alle Methoden für ein bestimmtes Objekt wie der Datenbankverwaltung anzeigen, verwenden Sie:
Alle Eigenschaften für eine Variable, die auf ein SMO-Tabellenobjekt festgelegt ist, zeigen Sie mit folgendem Befehl an:
PowerShell-eigene Laufwerke
Neben den bekannten Dateisystemlaufwerken wie C: und D: bietet die PowerShell auch Laufwerke, die die WindowsRegistrierungsstrukturen HKEY_LOCAL_MACHINE (HKLM:) und HKEY_ CURRENT_USER (HKCU:), den Speicher für digitale Signaturzertifikate auf Ihrem Computer (Cert:) und die Funktionen in der aktuellen Sitzung (Function:) darstellen. Diese bezeichnet die Shell als "Windows PowerShell-Laufwerke". Eine Liste rufen Sie mit dem Befehl Get-PSDrive auf. Um zum Beispiel in der lokalen Registry zum Schlüssel "HKEY_CURRENT_USER" zu wechseln, geben Sie in der PowerShell CD hkcu: ein. Den Inhalt des Registry-Hives können Sie sich mit Dir anzeigen lassen.
Wie bereits erwähnt, macht der SQL Server-Anbieter für Windows PowerShell die Hierarchie von Server-Objekten auf die gleiche Weise verfügbar. Mit den Pfaden können Sie Objekte finden und Befehle über die PowerShell ausführen. Der SQL Server-Anbieter implementiert dazu ein Laufwerk mit der Bezeichnung "SQL-SERVER:". Der erste Teil eines SQLSERVER:\SQLPfads ist SQLSERVER:\SQL \[Servername]\Instanz. Der Pfad zur Vendor-Tabelle im Purchasing-Schema der AdventureWorks2012-Datenbank in einer Standardinstanz auf dem lokalen Server lautet zum Beispiel SQLSERVER:\ SQL\ localhost\DEFAULT\Databases\AdventureWorks2012\Tables\Purchasing.Vendor. Navigieren Sie zum Beispiel zu dem Knoten, für den Sie eine Liste von untergeordneten Elementen anzeigen wollen und geben Sie Get-ChildItem ein:
Sie haben die Möglichkeit, T-SQL-Befehle in der PowerShell einzugeben, genauso wie bei Abfragen im Management-Studio oder über sqlcmd.exe. Invoke-SqlCmd ist ein SQL Server-Cmdlet, das Skripte ausführt, die Anweisungen aus den Sprachen (Transact-SQL und XQuery) und Befehlen enthalten kann. Ausführliche Hilfen zum Thema finden Sie auf der Seite [1].Möchten Sie zum Beispiel eine Abfrage erstellen, verwenden Sie folgende Syntax:
Fazit
Wer sich einmal mit dem grundlegenden Aufbau der PowerShell-Cmdlets vertraut gemacht hat, durchsteigt die Logik dahinter schnell. Kombiniert mit den vorhandenen Hilfen sowie der Ergänzung unvollständiger Kommandos via Tabulator sind erste erfolgreiche Gehversuche einfach möglich. Danach folgen ganze Skripte, die Sie in PS1-Dateien zusammenfügen und auf Ihren Rechnern im Netzwerk ablaufen lassen. Viele Admins scheuen sich noch vor der Skriptsprache, doch wer sie einmal gewohnt ist und zu schätzen weiß, wird nicht mehr auf die PowerShell verzichten wollen.
Seite 1: Desired State Configuration zur Serverwaltung nutzen
Seite 2: PowerShell-eigene Laufwerke
dr/ln/Thomas Joos
[1] https://msdn.microsoft.com/de-de/library/cc281720.aspx
Invoke-Sqlcmd -Query "SELECT @@VERSION;" -QueryTimeout 3 Invoke-Sqlcmd -Query "SELECT @@VERSION;" -QueryTime 3 Invoke-Sqlcmd -Query "SELECT @@VERSION;" -QueryT 3Diese drei Befehle führen alle eine TSQL-Anweisung in der PowerShell aus, die den Status des Servers anzeigt. Geben Sie am Ende zusätzlich noch "|fl" ein, erhalten Sie wie immer ausführlichere Informationen angezeigt.
Bild 2: Auch auf SQL-Tabellen haben Sie in der PowerShell Zugriff.
Mit Get-Help SQLServer erhalten Sie eine Hilfe zu den speziellen SQL-Server-Befehlen in der PowerShell. Möchten Sie alle Methoden für ein bestimmtes Objekt wie der Datenbankverwaltung anzeigen, verwenden Sie:
Set-Location SQL:\[Servername]\ DEFAULT\Databases Get-Item . | Get-Member -Type Methods
Alle Eigenschaften für eine Variable, die auf ein SMO-Tabellenobjekt festgelegt ist, zeigen Sie mit folgendem Befehl an:
$Var = New-Object Microsoft.SqlServer.Management.SMO.TableSie können mehrere Instanzen von SQL Server 2012 auf einem Server installieren und auf diese Instanzen über die PowerShell zugreifen. Dabei navigieren Sie wie bei normalen Verzeichnispfaden, zum Beispiel mit SQLSERVER:\SQL\[Servername]\Instanz. Jeder Server verfügt über eine Standardinstanz, der Sie bei der Installation keinen Namen geben. In der Regel lautet deren Bezeichnung "MSSQLSERVER". Geben Sie also in einer Verbindungszeichenfolge nur einen Computernamen an, verbindet Sie die PowerShell mit der Standardinstanz. Alle anderen Instanzen auf dem Server sind dagegen benannte Instanzen.
$Var | Get-Member -Type Properties
PowerShell-eigene Laufwerke
Neben den bekannten Dateisystemlaufwerken wie C: und D: bietet die PowerShell auch Laufwerke, die die WindowsRegistrierungsstrukturen HKEY_LOCAL_MACHINE (HKLM:) und HKEY_ CURRENT_USER (HKCU:), den Speicher für digitale Signaturzertifikate auf Ihrem Computer (Cert:) und die Funktionen in der aktuellen Sitzung (Function:) darstellen. Diese bezeichnet die Shell als "Windows PowerShell-Laufwerke". Eine Liste rufen Sie mit dem Befehl Get-PSDrive auf. Um zum Beispiel in der lokalen Registry zum Schlüssel "HKEY_CURRENT_USER" zu wechseln, geben Sie in der PowerShell CD hkcu: ein. Den Inhalt des Registry-Hives können Sie sich mit Dir anzeigen lassen.
Wie bereits erwähnt, macht der SQL Server-Anbieter für Windows PowerShell die Hierarchie von Server-Objekten auf die gleiche Weise verfügbar. Mit den Pfaden können Sie Objekte finden und Befehle über die PowerShell ausführen. Der SQL Server-Anbieter implementiert dazu ein Laufwerk mit der Bezeichnung "SQL-SERVER:". Der erste Teil eines SQLSERVER:\SQLPfads ist SQLSERVER:\SQL \[Servername]\Instanz. Der Pfad zur Vendor-Tabelle im Purchasing-Schema der AdventureWorks2012-Datenbank in einer Standardinstanz auf dem lokalen Server lautet zum Beispiel SQLSERVER:\ SQL\ localhost\DEFAULT\Databases\AdventureWorks2012\Tables\Purchasing.Vendor. Navigieren Sie zum Beispiel zu dem Knoten, für den Sie eine Liste von untergeordneten Elementen anzeigen wollen und geben Sie Get-ChildItem ein:
Set-Location SQLSERVER:\SQL Get-ChildItemMöchten Sie sich alle Instanzen auf einem Server anzeigen lassen, tippen Sie folgende Befehle ein:
Set-Location SQLSERVER:\SQL\ localhost Get-ChildItemAlle Objekte der Standardinstanz zeigen Sie mit dem folgenden Befehl an:
Set-Location SQLSERVER:\SQL\ localhost\DEFAULT Get-ChildItemAlle Datenbanken einer Instanz können Sie sich ebenfalls darstellen lassen. Mit "-force" zeigt das Cmdlet auch die Systemdatenbanken an. Der Vorteil der Anzeige in der PowerShell ist zum Beispiel, dass Sie auf einem Blick den Status und die Sortierreihenfolge sowie die eingestellte Sicherungsmethode sehen.
Set-Location SQLSERVER:\SQL\ localhost\DEFAULT\Databases Get-ChildItem -forceNach der Navigation zu einem Knoten können Sie Informationen abrufen oder Verwaltungsaufgaben durchführen. Verwenden Sie Invoke-SqlCmd, um Daten in Tabellen und Ansichten aus der Power- Shell abzufragen oder zu ändern. Mit Get-Member zeigen Sie die für Objekte oder Objektklassen verfügbaren Möglichkeiten an. Die Eigenschaften erhalten Sie über
Set-Location SQLSERVER:\SQL\ localhost\DEFAULT\Databases Get-Item . | Get-Member -Type PropertiesIn folgendem Beispiel navigieren wir zum Knoten "AdventureWorks2012" in einem SQLSERVER:-Pfad und lassen uns die Objekteigenschaften anzeigen:
Set-Location SQLSERVER:\SQL\ localhost\DEFAULT\Databases\ 'Um eine Liste der Tabellen aus dem SalesSchema in AdventureWorks2012 abzurufen, verwenden Sie
AdventureWorks2012 Get-Item . | Get-Member -Type Properties
Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\In folgendem Beispiel erstellen Sie mit der Methode "SMO Create" eine Datenbank und zeigen deren Eigenschaften an:
AdventureWorks2012\Tables Get-ChildItem | where {$_.Schema -eq "Sales"}
Set-Location SQLSERVER:\SQL\ localhost\DEFAULT\Databases $DB = New-Object Microsoft.Sql -Server.Management.SMO.Database $DB.Parent = (Get-Item ..) $DB.Name = "Stuttgart" $DB.Create() $DB.StateMit $DB.Status lassen Sie sich noch den Status der Datenbank anzeigen. Öffnen Sie das SQL Server Management Studio, sehen Sie auch hier die Datenbank.
Sie haben die Möglichkeit, T-SQL-Befehle in der PowerShell einzugeben, genauso wie bei Abfragen im Management-Studio oder über sqlcmd.exe. Invoke-SqlCmd ist ein SQL Server-Cmdlet, das Skripte ausführt, die Anweisungen aus den Sprachen (Transact-SQL und XQuery) und Befehlen enthalten kann. Ausführliche Hilfen zum Thema finden Sie auf der Seite [1].Möchten Sie zum Beispiel eine Abfrage erstellen, verwenden Sie folgende Syntax:
Invoke-SqlCmd -Query "SELECT GET -DATE() AS TimeOfQuery;"Nicht alle sqlcmd-Befehle sind in InvokeSqlCmd verfügbar. Die nicht unterstützten Befehle sind zum Beispiel: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace und :serverlist.
-Server -Instance "sql\erp"
Fazit
Wer sich einmal mit dem grundlegenden Aufbau der PowerShell-Cmdlets vertraut gemacht hat, durchsteigt die Logik dahinter schnell. Kombiniert mit den vorhandenen Hilfen sowie der Ergänzung unvollständiger Kommandos via Tabulator sind erste erfolgreiche Gehversuche einfach möglich. Danach folgen ganze Skripte, die Sie in PS1-Dateien zusammenfügen und auf Ihren Rechnern im Netzwerk ablaufen lassen. Viele Admins scheuen sich noch vor der Skriptsprache, doch wer sie einmal gewohnt ist und zu schätzen weiß, wird nicht mehr auf die PowerShell verzichten wollen.
Seite 1: Desired State Configuration zur Serverwaltung nutzen
Seite 2: PowerShell-eigene Laufwerke
| << Vorherige Seite | Seite 2 von 2 |
dr/ln/Thomas Joos
[1] https://msdn.microsoft.com/de-de/library/cc281720.aspx