IIS: Schnelle und einfache Webserver

Mithilfe von Windows PowerShell können Sie Webserver wesentlich schneller und einfacher installieren.

Jason Helmick

Überlegen Sie, wie viele Male Sie IIS installieren. Nicht sehr? Wirklich? Prüfen Sie Plattformen wie Exchange und SharePoint, IIS als erforderliche Software, die Web-Farmbereitstellungen, Tests und Entwicklungsumgebungen. Sie könnten mehr Zeit installieren von IIS, als Sie denken.

Hinzu kommt die Notwendigkeit für Disaster Recovery Automation. Bringen Sie Ihre Webfarm wieder online in Minuten? Installieren und Konfigurieren von IIS zusammen mit Ihrer Web-Sites ist eine einfache Aufgabe. Es ist eine lange und langweilige Prozess haben Sie eine Menge von Servern.

Niemand will Wochenende Einrichten von Servern zu verbringen. Sie Ihre Webfarm, Web-Sites verwalten möchten, und das Web "Zeug" montags bis freitags von neun bis fünf. Möchten Sie jede Gelegenheit zu beschleunigen und automatisieren Sie die Aufgaben in Ihrem Job.

Diese schrittweise Anleitung hilft Ihnen IIS und Standard-Websites, um eine Reihe von Servern, alle auf einmal, in etwa vier Minuten bereitstellen. Sie können das nicht mit dem Server-Manager GUI Werkzeug und GUI IIS-Manager. In der Tat ist die GUI Teil des Problems. Wie können Sie diese magische Dinge tun? Windows PowerShell. (Hinweis: Dies gilt für IIS 7.5 und IIS 8.)

PowerShell-Remoting

Bevor wir begonnen erhalten, haben Sie Windows PowerShell-Remoting auf Ihrem Server aktiviert? Wenn nicht, sollten Sie. Das ist, wie dieser Plan geht zu arbeiten. Bevor wir auf die schnelle und einfache Teil der Bereitstellung, betrachten wie man Windows PowerShell-Remoting aktiviert, falls Sie dies nicht bereits getan haben.

Es gibt zwei Methoden, dies zu tun. Wenn Sie versuchen, diese in einer Testumgebung, kann dann die erste Methode schneller sein. Es gibt zwei Windows PowerShell-Funktionen, die Sie aktivieren möchten: Windows PowerShell-Remoting und Skript-Ausführung. Die erste Methode erfordert, dass Sie finden Sie auf jedem Server, den Sie verwalten möchten. Sie können verwenden Sie Remote Desktop Protocol (RDP) oder Sneaker-Net und zwei Befehle ausführen.

1.   Öffnen Sie eine Windows PowerShell-Konsole mit Administratorrechten, und verwenden Sie das Cmdlet Enable-PSRemoting um zu Windows PowerShell-Remoting auf jedem Server zu aktivieren:

PS> Enable-PSRemoting -Force

2.   Sie werden einige zusätzliche Module auf diesen Servern gespeichert-Cmdlets verwenden möchten. Um diese später zu verwenden, müssen Sie Skripts ausgeführt werden können —, die Windows PowerShell standardmäßig nicht erlaubt. Lassen Sie uns so ändern, dass:

PS> Set-ExecutionPolicy RemoteSigned –Force

An diesem Punkt können Sie bereitstellen und verwalten Ihre IIS-Server. Haben Sie Hunderte von Servern zu verwalten, sollten Sie eine Gruppenrichtlinie für diese Änderungen ausgeben. Um verläuft auf diesen Servern eine lächerliche Zeitverschwendung, so sind hier die Schritte zum Aktivieren von Windows PowerShell-Remoting mit einem Gruppenrichtlinienobjekt (GPO):

  1. Aktivieren Sie "Automatische Konfiguration von Listenern zulassen", und legen Sie IPv4 und IPv6 auf "*". Sie finden den Schlüssel an: Computer Computerkonfiguration\Richtlinien\Administrative Vorlagen\Windows Komponenten\Windows Remoteserver Management\WinRM.
  2. Skriptausführung unter "Auf Skriptausführung aktivieren" aktivieren, und legen Sie die Richtlinieneinstellung "signiert zulassen nur Skripts" oder "Lokale Skripts und remote-signierten Skripts zulassen". Sie finden den Schlüssel an: Computer Computerkonfiguration\Richtlinien\Administrative Vorlagen\Windows Komponenten\Windows PowerShell.
  3. Legen Sie den Windows Remote Management (WinRM) Dienst automatisch, um diesen Schlüssel starten: Computer Configuration\Policies\Windows Settings\Security Settings\System Dienstleistungen.

Wenn Sie Windows-Firewall auf diesen Computern ausgeführt haben, müssen Sie eine eingehende Regel, da WinRM Port 5985 überwacht. Sie finden den Schlüssel an: Computer Configuration\Policies\Windows-Einstellungen\Sicherheitseinstellungen\Windows-Firewall mit erweiterter Sicherheit.

Diese Webserver bereitstellen

Jetzt beginnt der Spaß. Dies ist relativ einfach, wie es nur ein paar Windows PowerShell-Einzeiler dauert, die Magie geschehen zu machen.

1.   Eine Liste aller Server-Namen, die Teil der Bereitstellung einer Variablen zu speichern. Sie können eine Liste in Editor erstellen, wenn Sie möchten, und dann mithilfe von Windows PowerShell zum Lesen dieser Liste:

PS> $servers= get-content c:\servers.txt

Dies ist ein wenig schlampig, vor allem im Umgang mit einer großen Server-Liste. Es ist besser, Windows PowerShell, die ganze Arbeit machen. Wussten Sie, dass die Active Directory-Cmdlets erhalten Sie eine Liste von Computernamen? Um die Active Directory-Cmdlets verwenden, müssen Sie den Remote Server Administration Tools (RSAT) für Active Directory installiert. Wenn Sie das Geheimnis um implizite Windows PowerShell-Remoting kennen, können Sie diese verwenden, ohne die Cmdlets lokal installieren. Mit den Remoteserver-Verwaltungstools installiert ist die erste Aufgabe für das Modul für die Active Directory-Cmdlets importieren:

PS> Import-Module ActiveDirectory

Nach dem Import können Sie das Cmdlet Get-ADComputer, um die Computernamen Ihrer Wahl zu ergreifen. In diesem Beispiel beginnen den Computer, auf denen wir alle IIS bereitstellen werde, mit dem Namen "Web". Filtern Sie das Cmdlet Get-ADComputer nur die Computer zu finden, die beginnen mit dem Namen "Web", und Pfeife, Select-Object, nur den Namen des Computers zu ergreifen:

PS> $servers= Get-ADComputer -filter 'name -like "web*"' | Select-Object -ExpandProperty name

2.   Jetzt ist es Zeit, nutzen Sie die Kraft der Windows PowerShell-Remoting um einfach heben was wäre normalerweise eine lange und langweilige Prozess zu machen. Lassen Sie IIS bereitstellen. Wir erstellen zunächst eine Sitzung auf allen Servern, die wir zusammengestellt:

PS> $session=New-PSSession -ComputerName $servers

3.   Der nächste Schritt ist, das Server-Manager-Modul auf den Remotecomputern zu importieren. Dieses Modul hat die Cmdlets, die installieren und Entfernen von Serverrollen und Features. Wir verwenden das Cmdlet Invoke-Command mit einem Parameter für die Sitzung, die wir zuvor erstellt. Das Interessante daran ist, dass alle Server sofort alle Anweisungen innerhalb der Skript-Block {} gesendet erhalten:

PS> Invoke-Command -Session $session {Import-module ServerManager}

Dieser nächste Schritt ist dabei nicht erforderlich. Dies prüft nur, ob IIS auf dem Remotecomputer installiert ist. Das Get-WindowsFeature-Cmdlet wird eine schöne Aufgabe dieses:

PS> invoke-command -Session $session {Get-WindowsFeature web-server} | format-table -AutoSize

Let 's talk about Installieren von IIS für einen Moment, bevor wir in die Befehle zu stürzen. IIS verfügt über eine Standardinstallation, die nur statische Webseiten ermöglicht. Dies ist aus Gründen der Sicherheit groß, aber die meisten von uns müssen einige zusätzlichen Komponenten für unsere eigenen Anforderungen.

Wenn Sie die GUI für die Installation verwenden, die Komponenten sind alle aufgelistet und Sie können einfach die Kontrollkästchen. Mit Windows PowerShell müssen Sie den remote-Computern speziell welche Komponenten mitteilen möchten. Wenn Sie bei einem beliebigen Windows Server 2008 R2 oder Windows Server 8 Computer sitzen, z. B. können der Get-WindowsFeature Sie Liste alle verfügbaren Komponenten für IIS (Beachten Sie, dass Sie zunächst das ServerManager-Modul importieren müssen):

PS> Get-WindowFeature *web*

Sobald Sie die Namen der Komponenten kennen, können Sie die Add-WindowsFeature installieren. Beginnen Sie mit dem Web-Server, und fügen Sie jede Komponente durch ein Komma getrennt:

PS> Add-WindowsFeature Web-Server, ASP

Sie können die IIS-Komponenten installieren, ohne eine lange Zeichenfolge von ihnen eingeben. Denken Sie daran, die Installation alles eine gute Idee, aus Sicherheitsgründen nicht, aber das Add-WindowsFeature-Cmdlet verfügt über einen Parameter, der helfen:

PS> Add-WindowsFeature Web-Server -IncludeAllSubFeature

Nun zurück zu unserem Remotebereitstellung von IIS. Wir wollen die Standardinstallation und die zusätzlichen Komponenten für ASP und ASP.NET. Noch einmal, verwenden wir das Cmdlet Invoke-Command. Nachdem wir diesen Befehl ausführen, werden alle Server IIS installieren:

PS> Invoke-command -Session $session {Add-WindowsFeature web-server,web-asp,web-asp-net}

4.   Für Testzwecke, werden wir eine Reihe von Webseiten auf die neuen Web-Server bereitstellen. Wir verwenden eine default.htm und eine testpage.asp-Datei. Zuordnen von Laufwerken zu Servern und Kopieren der Dateien auf der Standardwebsite würde lange dauern. Stattdessen, Windows PowerShell und der Serverliste verwenden wir das Kopieren zu tun.

In diesem Beispiel befinden sich die Web-Dateien in c:\files. Kopieren Sie sie mit der Copy-Item-Cmdlet, um ein Ziel, einen UNC-Pfad. Der UNC-Pfad muß den Namen des Servers. Wir übergeben die Serverliste ($Server) an das Cmdlet Foreach-Object. Jeder Servername in $Server wird Foreach durchlaufen. Um den UNC-Pfad zu beheben, so dass wir nicht in den Servernamen eingeben müssen, verwenden Sie die Windows PowerShell besondere Variable "$ _". Diese Variable enthält den aktuellen Servernamen aus $Server:

PS> $servers | foreach{copy-item -Path c:\files\*.* -Destination "\\$_\c$\inetpub\wwwroot"}

Wir bereitgestellt nur IIS und eine Standard-Web-Site zu einer Reihe von Servern in etwa vier Minuten. Um die Websites zu testen, starten Sie Internet Explorer mithilfe der oben beschriebenen Technik. Dieser Befehl starten Sie einen neuen Browser für jeden Server und die Testseite anzeigen:

PS> $servers | foreach{Start-Process iexplore "http://$_/testpage.asp"}

Schließen Sie alle Browser und wieder ins Windows PowerShell, versuchen Folgendes:

PS> Stop-Process –Name iexplore

Web-Server entfernen

Wenn Sie Bereitstellungen für Disaster Recovery testen oder einfach testen, diese Technik, Sie könnten alles entfernen möchten wir hinzugefügt und beginnen wieder von einer sauberen Umwelt. Hier ist, wie man die Websitedateien und Web-Server zu entfernen, und führen Sie einen Neustart der Computer:

PS> $servers | foreach{remove-item -Path "\\$_\c$\inetpub\wwwroot\*.*"} PS> Invoke-command -Session $session {Remove-WindowsFeature web-server,web-asp,web-asp-net} PS> Restart-Computer –Computername $servers -Force

Skript die Lösung

Das beste Teil über Windows PowerShell ist, dass sobald Sie etwas von der Konsole getan haben, können Sie es in eine Textdatei kopieren und es ein Skript machen. Kein Stress, keine Programmierung – nur reine Automatisierung. Wenn Sie dieser Bereitstellung an der Nachricht eines Momentes für Disaster Recovery und zusätzliche Tests ausführen möchten, kopieren Sie die Befehle hier detailliert in einer Textdatei namens IISDeploy.ps1. Sie können dieses Skript nur ausführen, wenn Sie bereitstellen müssen.

Diese Art der Technik eröffnet eine ganze Reihe neuer Möglichkeiten. Sie können automatisieren mehrerer Websites zu einer Webfarm bereitstellen, generiert Auslastungstests auf der Farm oder diese Techniken auch für andere Rollen und Features in Windows verwenden.

Überprüfen Sie in der WebAdministration-Modul in IIS, die Cmdlets zu erstellen und Konfigurieren von Websites, App-Pools und mehr hat. Wenn Sie etwas automatisieren müssen, wird Windows PowerShell Ihre Arbeit viel einfacher und schneller machen.

Jason Helmick  enthält mehr als 20 Jahren als eine Unternehmens-Berater, Schulungsleiter und Autor. Als der Direktor der Technologien Windows PowerShell-Schnittstelle technische Schulungen konzentriert er sich auf Automatisierung mit Active Directory und IIS. Sie finden weitere Informationen über IIS in seinem bevorstehenden Buch von Manning Publications, "Learn Windows IIS in einem Monat Mittagessen." Sie erreichen ihn in die JasonHelmick@gmail.com.

Verwandter Inhalt