PowerShell für IIS

Manchmal wird es nötig, den IIS scriptgesteuert anzusprechen. Wenn man beispielsweise eine Web-Applikation im Team mit dem TFS entwickelt und der Kunde regelmäßige Versionsstände erhalten möchte, braucht man irgendwann eine Lösung, die die Verteilung der Ergebnisse automatisiert (continous delivery). codingfreaks zeigt ein paar wichtige Handgriffe, um den Zugriff per PowerShell auf den IIS einzurichten.

Die notwendigen Mittel, um per PowerShell bequem auf einen IIS zuzugreifen, bringen die aktuellen Windows-Versionen alle mit. Zunächst muss geprüft werden, ob die Vorbedingungen erfüllt sind. Die folgenden Schritte wurden unter einem Windows 7 durchgeführt. Für Windows Server 2008 muss an einigen Stellen abweichend von den hier gezeigten Beispielen z.B. der Server Manager genutzt werden. Ansonsten läuft alles analog ab.

Installation

Damit die notwendigen PowerShell-Module für den IIS auf einem System landen, muss über „Programme und Funktionen“ -> „Windows-Funktionen aktivieren oder deaktivieren“ zunächst ein Haken bei „IIS-Verwaltungsskripts und -tools“ gesetzt werden:

Abb. 1: Skripts installieren

Konfiguration

Ist das erledigt, muss die PowerShell nun noch dazu überredet werden, die Skripts auch zu nutzen. Dazu gibt man im Startmenu im Suchfeld „powershell“ ein und wählt den Eintrag „Windows PowerShell“ mit der rechten Maustaste an und klickt dann auf „Als Administrator ausführen“. ACHTUNG! Auf x64-Systemen darf auf keinen Fall die x86-Version der Powershell gestartet werden, da das IIS-Modul dann nicht läuft!

Das erste Problem ist, dass die PS normalerweise so eingestellt ist, dass sie im Restricted-Mode läuft und somit nicht ohne weiteres Module nachlädt. Das folgende Kommando verschafft Klarheit:

get-executionpolicy

gibt im Normalfall „Restricted“ zurück. Mit

set-executionpolicy remotesigned

vermindert man diese restriktive Einstellung ein wenig, sodass man nun mit

import-module webadministration

die eben noch installierten Skripts dazuladen kann. Ein einfaches anschließendes

get-module

listet dann den Erfolg der Operation auf:


ModuleType Name                      ExportedCommands
---------- ----                      ----------------
Manifest   webadministration         {Restart-WebAppPool, Remov...

Nutzung

Die hier gezeigten Techniken können unter Managing IIS with the IIS 7.0 PowerShell Snap-In detailliert nachgelesen werden.

Die einfachste Möglichkeit, die Funktionen zu testen besteht im Erkunden der IIS-Struktur durch Direcotry-Surfing. Über

cd iis:

wechselt man dazu von der Dateisystem- auf die IIS-Ebene. Die PS-Komponenten des IIS betrachten die Struktur des IIS wie ein Dateisystem. Ein einfaches

cd Sites

bringt uns somit eine Ebene tiefer. Mein lokal installierter IIS sieht im IIS-Manager selbst wie folgt aus:

Abb. 2: IIS-Manager

Anlalog dazu können wir uns nun also in PS per

cd 'Default Web Site'

tiefer ins Geflecht begeben. Die PS-Konsole zeigt uns wie gewohnt den aktuellen Pfad vor dem Cursor an:

PS IIS:\Sites\Default Web Site

Konsequenterweise führt ein

dir

zum Auflisten der Struktur des gewählten Ordners. Befindet man sich in einem Ordner kann man über

Get-Item 'ElementName' | Select *

erweiterte Details zu dem ElementName-Element anzeigen.
Möchte man nun per PowerShell eine neue Website anlegen, kann man dies mit folgendem Kommando erledigen:

New-Item TestWeb -physicalPath c:\inetpub\wwwroot\TestWeb\v1 -type Application

erledigen. In unserem Beispiel führt dies zu einer Web-Anwendung, die im Standard-Ordner des IIS abgelegt ist. Über den physicalPath-Parameter habe ich gleich eingestellt, dass das Web versioniert abgelegt werden soll. Der Vorteil ist nun, dass ich per

Set-ItemProperty TestWeb -name PhysicalPath -value c:\inetpub\wwwroot\TestWeb\v2

einfach den Ablageort im Web „umbiegen“ kann. Ich könnte so auch ganz andere Eigenschaften eines Webs ändern.

Resumé

Die PowerShell-Snap-Ins für den IIS sind sehr mächtig und in manchen Szenarien unverzichtbar. Leider ist die Installation und Integration in den IIS nicht so gut gelungen. Mit ein wenig Hintergrundwissen bekommt man sie aber zum Laufen und erhält im Gegenzug Möglichkeiten, die ohne das Snap-In undenkbar wären!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.