In diesem Beitrag beschreibe ich welche Voraussetzungen erfüllt sein müssen, um IIS Websites mit PowerShell erstellen zu können und welche PowerShell Befehle erforderlich sind
IIS Management Scripts and Tools Feature aktivieren
Damit ich die Vorteile einer automatisierten Verwaltung und Bereitstellung von Webdiensten vollständig nutzen kann, müssen Windows Features aktiviert werden. Neben Powershell als Must Have auf einem Windows Server, ist es das Feature IIS Management Scripts and Tools.
Grafisch
Die IIS Management Scripts and Tools kannst Du über den Server Manager auf Deinem Windows Server bereitstellen.
Öffne den Server Manager und öffne oben rechts das Menü
Wähle den Menüpunkt Add Roles and Features um den Wizard zu starten. Der Wizard startet mit einer Seite "Before You Begin".
Über die Schaltfläche "Next" leitet der Wizard weiter auf die Auswahl des Installationstyps:
Wähle "Role-based or feature-based installation"
Über die Schaltfläche "Next" leitet der Wizard weiter auf die Auswahl der Zielserver.
Als Zielserver ist zunächst der Server auszuwählen, auf dem gerade der Server Manager ausgeführt wird und auf dem die IIS Management Scripts and Tools bereitgestellt werden sollen.
Über die Schaltfläche "Next" leitet der Wizard weiter auf die Auswahl der Server Roles.
Auf dieser Seite müssen die folgenden Knoten geöffnet werden:
Im Knoten Management Tools wählst Du das Feature IIS Management Scripts and Tools
Mit der Schaltfläche "Next" wird die Auswahl bestätigt und der Wizard leitet weiter auf die Seite Confirmation.
Die Seite Confirmation fasst zusammen, was auf dem ausgewählten Server bereitgestellt wird.
Über die Schaltfläche "Install" wird der Installations- und Bereitstellungsprozess gestartet.
Der Installationsprozess dauert eine Weile.
Nach erfolgreichem Abschluss der Installation sollte ein Serverneustart durchgeführt werden.
Powershell
Die IIS Management Scripts and Tools lassen sich natürlich auch über PowerShell installieren.
Dazu muss lediglich eine PowerShell Konsole mit Administratorrechten geöffnet werden, um folgenden Befehl auszuführen:
Install-WindowsFeature Web-Scripting-Tools
Auch hier sollte nach erfolgreichem Abschluss ein Serverneustart durchgeführt werden.
Website zum Hosten einer asp.net Webapplikation im IIS automatisch anlegen
Nachdem im vorherigen Abschnitt der IIS um die Management Scripts and Tools Funktionen erweitert wurde, stehen jetzt in PowerShell neue Funktionen zur Verfügung.
Auf der folgenden Seite hat Microsoft eine Übersicht über die WebAdministration PowerShell Funktionen:
WebAdministration Module | Microsoft Learn
Liste mit Application Pool lesen:
Get-Item -Path "IIS:\AppPools\*"
Einzelnen Application Pool mit Namen finden:
Get-Item -Path "IIS:\AppPools\OllisBlog App Pool"
Wenn der Application Pool gefunden wird, gibt die Funktion Get-Item ein Expando Objekt des Application Pools zurück. Sollte der Application Pool nicht verfügbar sein, erzeugt die Funktion eine Exception. Die Exception lässt sich jedoch mit dem Parameter -ErrorAction sowie dem Wert SilentlyContinue unterbinden.
Get-Item -Path "IIS:\AppPools\OllisBlog App Pool" -ErrorAction SilentlyContinue
Neuen Application Pool anlegen
New-WebAppPool -Name "OllisBlog App Pool"
Application Pool konfigurieren
Das folgende Beispiel zeigt, wie ein Application Pool angelegt und zugleich im Kontext eines Service Accounts ausgeführt werden kann:
$appPool = get-item -Path "IIS:\AppPools\OllisBlog App Pool" -ErrorAction SilentlyContinue
if($null -eq $appPool)
{
$appPool = New-WebAppPool -Name "OllisBlog App Pool"
$appPool.autoStart = "false"
$appPool | Set-Item
}
# setup managed runtime version to v4.0
$appPool.managedRuntimeVersion = "v4.0"
# setup process model start mode to AlwaysRunning
$appPool.startMode = 1
# disable process model idle timeout
$appPool.processModel.idleTimeout = "00:00:00";
# setup process model idle timeout action to Terminate
$appPool.processModel.idleTimeoutAction = 0;
# setup process model load user profile to false
$appPool.processModel.loadUserProfile = $false;
# setup process model logontype to logon as a service
$appPool.processModel.logonType = 1
# setup process model maximum process count to 0
$appPool.processModel.maxProcesses = 0
# setup process model identity type to SpecificUser
$appPool.processModel.identityType = 3;
# setup application pool user service account
$appPool.processModel.userName = "[SERVICE ACCOUNT]"
# setup application pool user password
$appPool.processModel.password = "[PASSWORD]"
$appPool | Set-Item
Die Konfigurationsmerkmale sind auf den folgenden Microsoft Seiten dokumentiert:
Application Pool starten
Start-WebAppPool -Name "OllisBlog App Pool"
Application Pool stoppen
Stop-WebAppPool -Name "OllisBlog App Pool"
Application Pool entfernen
Remove-WebAppPool -Name "OllisBlog App Pool"
Damit haben wir alle Befehle zum Anlegen und Konfigurieren der Web Application Pools im IIS. Als nächstes zeige ich wie eine Website im IIS angelegt wird.
Website im IIS anlegen
Es sollte immer geprüft werden, ob eine Website im IIS vorhanden ist:
Get-Website -Name "OllisBlog"
Eine neue Website wird mit dem folgenden Befehl angelegt:
New-Website -Name "OllisBlog" -Port 80 -PhysicalPath "PFAD ZUM VERZEICHNIS DER WEBSITE" -ApplicationPool "OllisBlog App Pool" -HostHeader "blog.oliver-zoufahl.de"
Mit dem Befehl werden folgende Informationen übergeben:
- Name: Der Name Website zur eindeutigen Identifikation im IIS
- Port: Die Portnummer, mit der die Website sichtbar sein soll
- PhysicalPath: Der pysikalische Pfad zum Website Verzeichnis, in dem die Website Dateien abgelegt sind
- ApplicationPool: Der Name des Application Pools, in dessen Sicherheitskontext die Website laufen soll
- HostHeader: Die Domain Url, mit der die Website aufgerufen werden kann
Für den Fall, dass die Website mit SSL/TLS Verschlüsselung eingerichtet werden soll, sind folgende Parameter zusätzlich zu verwenden:
- SSL: der Parameter gibt an, dass die Website SSL verwendet
- SslFlags: 0 gibt an, dass ein SSL/TLS Zertifikat aus dem Windows Zertifikatsspeicher zu verwenden ist. Mehr über SslFlags.
Das zu verwendende Zertifikat muss im Windows Zertifikatsspeicher verfügbar sein.
Ist das der Fall, kann mit folgendem Befehl das Zertifikat für die Website ausgewählt werden:
(Get-WebBinding -Name "OllisBlog" -Port 443).AddSslCertificate("74181cfd...","my")
Der Befehl lädt zunächst die Binding-Informationen für die Website "OllisBlog" mit Port 443. Es wird ein Bindungsobjekt zurückgegeben. Am Bindungsobjekt gibt es eine Funktion AddSslCertificate. Dieser Funktion wird der Zertifikatsthumbprint sowie die Location übergeben, in der das Zertifikat im Zertifikatsspeicher abgelegt ist.
Weitere nützliche Powershell Befehle sind:
Stop-WebAppPool -Name "Ollis Blog App Pool"
Diese Befehl beendet den Application Pool
Start-WebAppPool -Name "Ollis Blog App Pool"
Dieser Befehl startet den Application Pool
Stop-Website -Name "OllisBlog"
Dieser Befehl beendet die Website
Start-Website -Name "OllisBlog"
Dieser Befehl startet die Website
Fazit
Damit haben wir eine Vielzahl an Powershell Befehlen kennengelernt, mit denen eine automatisierte Konfiguration von Websites im Internet Information Server (IIS) implementiert werden kann.
Wenn ich damit helfen konnte, lass einen Kommentar da.
Viele Grüße,
Olli