Über die PowerShell und die Remoteverwaltungstools lassen sich neben Active Directory auch Serverdiensten Serverdienste wie Exchange Server 2010, SharePoint 2010 oder auch SQL Server 2012 verwalten.
Vor allem die neuen Versionen wie Windows Server 2012 und SQL Server 2012 bieten hier interessante Möglichkeiten. Um Active Directory remote zu verwalten, benötigen Sie zunächst auf der Arbeitsstation die Remoteserver-Verwaltungstools für Windows 7 mit Service Pack 1. Diese umfassen die Verwaltungsprogramme für die verschiedenen Serverdienste in Windows Server 2008 R2, auch die CMDlets um Active Directory in der PowerShell zu verwalten. Wollen Sie Windows Server 2012 von Arbeitsstationen mit Windows 8 verwalten, können Sie auch hier die Remoteserver-Verwaltungstools für Windows 8 installieren.
Remoteserver-Verwaltungstools in Windows 7 und Windows 8 installieren
Windows 7 installiert lediglich die Installationsdateien der jeweiligen Werkzeuge auf der Arbeitsstation, es werden keinerlei Tools aktiviert. Die Installation erfolgt als *.msi-Datei. Das hat den Vorteil, dass Sie die Installation der Remoteserver-Verwaltungstools auch skripten können, ohne dass diese im Startmenü verfügbar sind. Die einzelnen Tools müssen Sie dann in der Systemsteuerung über die Aktivierung der Windows-Funktionen hinzufügen.
In Windows 7 geben Sie im Suchfeld des Startmenüs optionalfeatures ein, in Windows 8 suchen Sie nach dem gleichen Begriff im neuen Startbildschirm. Dieser sucht automatisch nach Programmen, sobald Sie einen Buchstaben eingeben. Den Startbildschirm in Windows 8 starten Sie, indem Sie mit der Maus in die linke untere Ecke fahren und das Icon des Startbildschirms anklicken. Schneller geht es, wenn Sie die Windows-Taste auf der Tastatur betätigen.
Sie finden nach der Installation der *.msi-Datei für die Remoteserver-Verwaltungstools den neuen Bereich Remoteserver-Verwaltungstools\Rollenverwaltungstools in den Windows-Funktionen. Hier stehen alle Verwaltungsprogramme zur Verfügung, die die Serverdienste von Windows Server 2008 R2 und Windows Server 2012 bieten.
Die Verwaltungstools für Active Directory finden Sie zum Beispiel mit Rollenverwaltungstools\AD DS-/AD LDS-Tools. Hier stehen auch die CMDlets zur Verwaltung von Active Directory zur Verfügung. Zum Beispiel das Active Directory-Modul für Windows PowerShell. In Windows 8 sind die Remoteverwaltungs-Tools bereits aktiviert. Sind diese nicht gleich im Startbildschirm zu sehen, aktivieren Sie die Ansicht Alle Apps mit der Tastenkombination STRG+TAB. In Windows 7 finden Sie die Tools im normalen Startmenü.
Verwaltungstools mit PowerShell 3.0 in Windows Server 2012 installieren
Wollen Sie von einem Server mit Windows Server 2008 R2 oder Windows Server 2012 aus Serverdienste verwalten, die auf dem Server nicht aktiviert sind, können Sie auch hier die Verwaltungstools installieren.
Dazu benötigen Sie aber keine Patches, vielmehr können Sie die entsprechenden Tools direkt über den Server-Manager aktivieren. Die Installation erfolgt im Server-Manager über die Auswahl von Features\Feature hinzufügen\Remoteserver-Verwaltungstools\Rollenverwaltungstools. In Windows Server 2012 finden Sie die Tools über Verwalten\Rollen und Funktionen hinzufügen.
Sie können auf Servern die Installation der Verwaltungstools auch mit der PowerShell durchführen. Dazu laden Sie die entsprechenden CMDlets für die Verwaltung des Servers mit
Import-Module ServerManage
Mit Get-WindowsFeature lassen Sie die verfügbaren Features anzeigen. Die Installation von Features erfolgt dann mit dem Befehl Add-WindowsFeature <Kommagetrennte Liste>, zum Beispiel mit:
Add-WindowsFeature RSAT-AD-PowerShell,RSAT-AD-AdminCenter
die Installation der AD-Verwaltungstools.
Die Befehle funktionieren in der PowerShell 2.0 von Windows Server 2008 R2 und in der neuen PowerShell 3.0 von Windows Server 2012.
Remote-PowerShell aktivieren
Damit Sie einen Server über die PowerShell remote verwalten können, müssen Sie die Remoteverwaltung auf dem Server aktivieren. Dazu geben Sie auf dem entsprechenden Server den Befehl
Enable-PSRemoting -force
ein. Der Befehl aktiviert auch die Ausnahmen in der Windows-Firewall. Mit
Disable-PSRemoting -force
können Sie die Remoteverwaltung eines Servers über die PowerShell wieder deaktivieren.
Um den Port für die Verbindung zu überprüfen, verwenden Sie den Befehl
WinRM enumerate winrm/config/listener
Der Listener verwendet in Windows Server 2008 R2 und in Windows Server 2012 den Port 5985. Funktioniert der Zugriff nicht, können Sie auf dem Zielserver auch eine Liste von Servern pflegen, die Zugriff auf Remote-PowerShell-Sitzungen haben sollen. Dazu verwenden Sie den Befehl winrm set winrm/config/client @{TrustedHosts="<Alle Quellcomputer, durch Komma getrennt>"}.
Remote-PowerShell nutzen - Vorteile von PowerShell 3.0
In Remote-PowerShell-Sitzungen verwenden Sie die gleichen CMDlets wie auf den lokalen Servern. Allerdings erlauben nicht alle CMDlets eine Remoteverwaltung. Sie sehen die kompatiblen CMDlets am schnellsten, indem Sie überprüfen, ob das CMDlet die Option -ComputerName unterstützt. Mit dem Befehl
Get-Help * -Parameter ComputerName
lassen Sie sich eine Liste aller dieser CMDlets anzeigen. Hier zeigt sich auch eine Neuerung in der PowerShell 3.0, die standardmäßig in Windows 8 und Windows Server 2012 zur Verfügung steht. In Windows 7 und Windows Server 2008 R2 können Sie die PowerShell 3.0 nachträglich installieren, standardmäßig verwenden Windows 7 und Windows Server 2008 R2 die PowerShell 2.0.
In der PowerShell 3.0 hat Microsoft die Hilfefunktion deutlich erweitert. Wenn Sie eine Hilfe zu CMDlets aufrufen, kann sich die PowerShell selbstständig aktualisieren. Das funktioniert eingeschränkt auch mit der alten PowerShell 2.0, wenn Sie für das CMDlet get-help die Option -online verwenden, zum Beispiel mit
get-help get-command -online
Die PowerShell 3.0 bietet das neue CMDlet update-help, das die Hilfedateien der PowerShell aktualisieren kann. Dazu muss der Server über eine Internetverbindung verfügen. Der Befehl ruft die Hilfe direkt aus dem Internet ab.
Ebenfalls eine neue Funktion in der PowerShell 3.0 ist das CMDlet show-command. Dieses blendet ein neues Fenster mit allen Befehlen ein, die in der PowerShell verfügbar sind. Sie können im Fenster nach Befehlen suchen und sich eine Hilfe zum Befehl sowie Beispiele anzeigen lassen.
Mit der PowerShell lässt sich eine Remotesitzung auf einem Server starten. Am besten verwenden Sie dazu die PowerShell Integrated Script Engine (ISE). Diese ist in Windows 8 bereits aktiviert, muss aber teilweise in Windows 7 als Windows-Feature nachträglich aktiviert werden. Nach dem Start können Sie eine Verbindung mit Datei\Neue Remote-PowerShell-Registerkarte öffnen. Hier geben Sie einen Servernamen und einen Benutzernamen ein, mit dem Sie sich verbinden wollen.
Achten Sie auf die entsprechenden Ausnahmen in der Windows-Firewall des Zielrechners. Diese behandeln wir in den folgenden Abschnitten.
Exchange Server 2010 über die PowerShell verwalten
Neben der Möglichkeit, die herkömmlichen Serverdienste von Windows Server 2008 R2 oder Windows Server 2012 über das Netzwerk mit der PowerShell zu verwalten, funktioniert das auch für die meisten anderen aktuellen Serverdiensten von Microsoft. Vor allem SQL Server 2012, Exchange Server 2010 und SharePoint 2010 bieten entsprechende Möglichkeiten.
Sie müssen dazu auf den Arbeitsstationen aber zusätzlich die Verwaltungstools dieser Serverdienste über die Installationsdateien des Serverdienstes installieren. Anschließend stehen in den Startmenüs auf den Rechnern auch die PowerShell-Erweiterungen für SQL Server 2012, SharePoint 2010 und Exchange Server 2010 zur Verfügung.
Auf diesem Weg können Sie also auch auf einem Server oder einer Arbeitsstation nur die Verwaltungstools für Exchange Server 2010 installieren. Allerdings müssen Sie darauf achten, dass in Exchange Server 2010 auch die Verwaltungstools 64-Bit voraussetzen; die Installation auf einem 32-Bit-Computer ist daher nicht möglich.
Neben Windows Server 2008 SP2 x64 und Windows Server 2008 R2 können Sie die Verwaltungstools auch unter Windows Vista ab Service Pack 2 und unter Windows 7/8 installieren. Damit Sie die Installation durchführen können, müssen Sie folgende Vorbereitungen treffen:
-
Installieren von .NET Framework 3.5 Service Pack 1, wenn Sie Windows Vista einsetzen. Unter Windows 7 finden Sie das .NET Framework in den Windows-Funktionen, die Sie aktivieren können; das gilt auch für Windows 8.
-
In den Windows-Funktionen von Windows Vista und Windows 7/8 müssen Sie noch die Funktion IIS 6-Verwaltungskonsole über Internetinformationsdienste\Webverwaltungstools\Kompatibilität mit der IIS 6-Verwaltung aktivieren.
Wenn Sie diese Voraussetzungen geschaffen haben, können Sie über die Exchange-Server-2010-DVD die Verwaltungstools für Exchange Server 2010 installieren. Sie finden diese, wenn Sie eine benutzerdefinierte Installation durchführen.
Verwaltung per PowerShell von SharePoint 2010
Damit Sie PowerShell-Befehle für SharePoint 2010 nutzen können, müssen Sie über die SharePoint-Programmgruppe die SharePoint-2010-Verwaltungs-Shell starten oder die Befehle in eine normale PowerShell laden. Geben Sie dazu in der PowerShell oder PowerShell ISE den Befehl
Add-PSSnapin Microsoft.SharePoint.PowerShell
ein.
Wollen Sie alle Cmdlets für SharePoint anzeigen, verwenden Sie am besten den Befehl
Get-Command -pssnapin Microsoft.SharePoint.PowerShell
Mit dem Befehl
gcm -pssnapin microsoft.sharepoint.powershell | select name, definition | fl > .\SP2010cmdlets.txt
erstellen Sie eine *.txt-Datei, die alle Cmdlets für SharePoint enthält.
Wenn Sie
get-command
eingeben, sehen Sie alle Befehle, unabhängig von SharePoint. Die wenigsten Administratoren kennen alle Cmdlets. Haben Sie nur den Teil eines Befehls in Erinnerung, können Sie mit dem Platzhalter * arbeiten. Der Befehl
get-command *site
zeigt zum Beispiel alle Cmdlets an, deren Namen mit Site enden. Ist der gesuchte Befehl nicht dabei, können Sie auch mehrere Platzhalter verwenden, zum Beispiel den Befehl
get-command *site*
Er zeigt alle Befehle an, in denen das Wort site an beliebiger Stelle vorkommt.
Wollen Sie alle Cmdlets mit SPWeb auflisten, verwenden Sie den Befehl
Get-Command *SPWeb
Alle Vorlagen zeigen Sie mit
Get-SPWebTemplate
an, alle Dienstanwendungen mit
Get-SPServiceApplication
Die Lösungen der Farm zeigen Sie mit
Get-SPSolution
an, neue installieren Sie mit Add-SPSolution <Pfad und Name der *.wsp-Datei>. Features zeigt die Shell mit
Get-SPFeature
an.
PowerShell und SQL Server 2012
SQL Server 2012 können Sie ebenfalls in der PowerShell remote über das Netzwerk verwalten.
Dazu müssen Sie aber auf dem entsprechenden Computer die Verwaltungstools für SQL Server 2012 über die Installations-DVD installieren und die Remoteverwaltung für den Server im SQL-Server-Konfigurationsmanager aktivieren, und das ebenso in der PowerShell. Verwenden Sie auch hier den Befehl
Enable-PSRemoting -force
Der Befehl aktiviert zudem die Ausnahmen in der Windows-Firewall.
Außerdem ist eine neue Firewall-Regel erforderlich, die die Ports 1433-1434 zulässt. Funktioniert die Verbindung nicht, erstellen Sie noch eine eingehende Regel, die den Port 5985 zulässt.
Außerdem müssen Sie in der Windows-Firewall-Steuerung, Sie in der Systemsteuerung finden, folgende Ausnahmen aktivieren, damit der Zugriff über das Netzwerk funktioniert:
• Datei- und Druckerfreigabe
• Remotedienstverwaltung
• Windows-Remoteverwaltung
• Windows-Remoteverwaltung (Kompatibilität)
• Windows-Verwaltungsinstrumentation (WMI)
Anschließend funktioniert die Remoteverwaltung auch in Windows Server 2008 R2 über das Netzwerk.
Das neue PowerShell-Modul in SQL Server 2012 ist vollständig in die PowerShell von Windows Server 2008 R2 und Windows Server 2012 integriert. Sie starten eine PowerShell-Sitzung am schnellsten über das SQL-Server-Managementstudio, wenn Sie im Objekt-Explorer mit der rechten Maustaste auf ein Objekt klicken. Alternativ geben Sie in der Befehlszeile oder einer PowerShell-Sitzung den Befehl sqlps ein. Der Befehl funktioniert in Windows Server 2008 R2 und in Windows Server 2012.
Mit dem Befehl
get-command
lassen Sie sich die CMDlets anzeigen, mit get-help <CMDlet> erhalten Sie eine Hilfe zum CMDlet. Der Umgang mit der PowerShell in SQL Server 2012 entspricht dem Umgang mit der herkömmlichen Windows-PowerShell, Exchange-Verwaltungs-Shell oder SharePoint2010-Verwaltungs-Shell.
Sie können mit der PowerShell in SQL Server 2012 auch SQL-Server ab Version SQL Server 2000 SP4 verwalten. Achten Sie aber darauf, dass möglichst das aktuellste Service Pack für den SQL-Server installiert ist.
Mit SQL Server und PowerShell arbeiten
Standardmäßig blockiert die Windows-PowerShell nicht-signierte Skripts über die Ausführungsrichtlinie. Davon ist auch die SQL-PowerShell betroffen. Sie können die Ausführungsrichtlinie mit dem Cmdlet Set-ExecutionPolicy ändern und mit
Get-ExecutionPolicy
anzeigen. Die Ausführungsrichtlinie speichert ihre Daten in der Windows-Registrierung. Sie können folgende Einstellungen vornehmen:
• Restricted - Standardeinstellung. Keine Skripts erlaubt, SQL-Skripts funktionieren nicht.
• AllSigned - Nur signierte Skripts sind erlaubt. Auch hier funktionieren keine SQL-Skripts, da diese nicht signiert sind.
• RemoteSigned - Bei dieser Einstellung müssen Sie Skripts durch eine Zertifizierungsstelle signieren lassen.
• Unrestricted - Mit dieser Einstellung funktionieren auch die SQL-Skripts.
Nach der Eingabe von
Set-ExecutionPolicy unrestricted
müssen Sie die Ausführung noch bestätigen. Als Nächstes laden Sie mit
Import-Module sqlps
die Erweiterung in die PowerShell. Die Warnung, die daraufhin erscheint, können Sie ignorieren. Sie müssen nicht den ganzen Namen eines Cmdlet-Parameters angeben. Es genügen so viele Zeichen des Namens, dass dieser eindeutig von den anderen Parametern unterschieden werden kann, die das Cmdlet unterstützt. Hierfür drei Beispiele:
Invoke-Sqlcmd -Query "SELECT @@VERSION;" -QueryTimeout 3
Invoke-Sqlcmd -Query "SELECT @@VERSION;" -QueryTime 3
Invoke-Sqlcmd -Query "SELECT @@VERSION;" -QueryT 3
Alle drei Befehle führen eine T-SQL-Anweisung in der PowerShell durch, die den Status des Servers anzeigt. Wenn Sie am Ende noch ein |fl eingeben, erhalten Sie ausführlichere Informationen.
Mit
Get-Help SQLServer
erhalten Sie eine Hilfe zu den speziellen SQL-Server-Befehlen in der PowerShell. Wollen Sie alle Methoden für ein bestimmtes Objekt anzeigen, zum Beispiel bei der Verwaltung der Datenbanken, verwenden Sie:
Set-Location SQL:\<Servername>\DEFAULT\Databases
Get-Item . | Get-Member -Type Methods
Mit speziellen SQL-Befehlen arbeiten
Alle Eigenschaften für eine Variable, die auf ein SMO-Tabellenobjekt festgelegt ist, zeigen Sie mit folgenden Befehlen an:
$Var = New-Object Microsoft.SqlServer.Management.SMO.Table
$Var | Get-Member -Type Properties
Sie können mehrere Instanzen von SQL Server 2012 auf einem Server installieren. Auf diese Instanzen können Sie auch in der PowerShell zugreifen und zu diesen navigieren wie mit normalen Laufwerken, zum Beispiel mit SQLSERVER:\SQL\<Servername>\<Instanz>.
Jeder Server hat eine Standardinstanz. Sie geben bei der Installation keinen Namen für die Standardinstanz an. In den meisten Fällen ist der Name MSSQLSERVER. Wenn Sie in einer Verbindungszeichenfolge nur einen Computernamen angeben, verbindet Sie die PowerShell mit der Standardinstanz. Alle anderen Instanzen auf dem Server sind benannte Instanzen.
Der SQL-Server-Anbieter implementiert ein Laufwerk mit der Bezeichnung SQLSERVER: Sie können etwa mit dem Ordner SQLSERVER:\SQL Pfade beginnen. Der erste Teil eines SQLSERVER:\SQL-Pfads ist SQLSERVER:\SQL\<Name des Servers>\<Instanz>. Der Pfad zur Vendor-Tabelle im Purchasing-Schema der AdventureWorks2012-Datenbank in einer Standardinstanz auf dem lokalen Server ist zum Beispiel
SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks2012\Tables\Purchasing.Vendor
Alle Datenbanken einer Instanz können Sie sich ebenfalls anzeigen lassen. Mit -force zeigt das CMDlet auch die Systemdatenbanken an. Der Vorteil der Anzeige in der PowerShell ist beispielsweise, dass Sie auf einen Blick den Status und die Sortierreihenfolge sowie die eingestellte Sicherungsmethode sehen:
Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases
Get-ChildItem -force
Nach der Navigation zu einem Knoten können Sie Informationen abrufen oder Verwaltungsaufgaben durchführen. Verwenden Sie das Cmdlet Invoke-Sqlcmd, um Daten in Tabellen und Sichten aus der PowerShell abzufragen oder zu ändern. Mit dem Cmdlet Get-Member zeigen Sie die für Objekte oder Objektklassen verfügbaren Möglichkeiten an. Sie können sich auch die Eigenschaften ausgeben lassen:
Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases
Get-Item . | Get-Member -Type Properties
In folgendem Beispiel wird zum Knoten AdventureWorks2012 in einem SQLSERVER:-Pfad navigiert, und es werden die Objekteigenschaften angezeigt:
Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks2012
Get-Item . | Get-Member -Type Properties
Um eine Liste der Tabellen aus dem Sales-Schema in AdventureWorks2012 abzurufen, verwenden Sie den folgenden Befehl:
Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks2012\Tables
Get-ChildItem | where {$_.Schema -eq "Sales"}
Sie haben auch die Möglichkeit, T-SQL Befehle in der PowerShell einzugeben, genauso wie bei Abfragen im Managementstudio oder über sqlcmd.exe. Invoke-Sqlcmd ist ein SQL Server-Cmdlet, das Skripts ausführt, die Anweisungen aus den Sprachen (Transact-SQL und XQuery) und Befehlen enthalten können. Ausführliche Hilfen zum Thema finden Sie bei Microsoft. Wollen Sie zum Beispiel eine Abfrage erstellen, verwenden Sie folgende Syntax:
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "sql\erp"
Nicht alle sqlcmd-Befehle sind in Invoke-Sqlcmd verfügbar. Die nicht unterstützten Befehle sind zum Beispiel: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace, und :serverlist. (mje)