PowerShell-Snap-In: Erstellen von Websites, Webanwendungen, virtuellen Verzeichnissen und Anwendungspools
von Thomas Deml
In dieser exemplarischen Vorgehensweise erfahren Sie, wie Sie Websites, Webanwendungen, virtuelle Verzeichnisse und Anwendungspools erstellen.
Einführung
Der IIS PowerShell-Namespace besteht aus Elementen wie Websites, Apps, virtuellen Verzeichnissen und Anwendungspools. Das Erstellen neuer Namespaceelemente und deren Verwaltung ist mit den integrierten PowerShell-Cmdlets sehr einfach.
Erstellen von Websites
Wenn Sie mit PowerShell vertraut sind, wissen Sie, dass das Cmdlet „New-Item“ verwendet wird, um neue Elemente in den verschiedenen PowerShell-Namespaces zu erstellen. Der Befehl New-Item c:\TestDirectory
erstellt z. B. ein neues Dateisystemverzeichnis (die meisten verwenden den Alias MD
oder MKDIR
für New-Item
). New-Item
wird auch verwendet, um neue Websites im IIS PowerShell-Namespace zu erstellen.
Parameter
Wenn Sie ein neues Dateisystemverzeichnis erstellen, müssen Sie lediglich den Namens des Verzeichnisses als einziges Argument angeben. Leider reicht dies nicht aus, wenn Sie eine Website erstellen. Zum Erstellen einer Website sind zusätzliche Parameter wie der Dateisystempfad und Netzwerkbindungen erforderlich. Hier sehen Sie den Befehl zum Erstellen einer neuen Website, gefolgt von einem Dir-Befehl:
PS IIS:\Sites> New-Item iis:\Sites\TestSite -bindings @{protocol="http";bindingInformation=":80:TestSite"} -physicalPath c:\test
PS IIS:\Sites> dir
Name ID State Physical Path Bindings
---- -- ----- ------------- --------
Default Web Site 1 Started f:\inetpub\wwwroot http *:80:
TestSite 2 Started c:\test http :80:TestSite
Die Verwendung des Arguments „-physicalPath“ ist ziemlich einfach. Aber Sie fragen sich vielleicht, warum das Argument „-bindings“ so komplex aussieht.
Das verwendete Konstrukt ist eine Hashtabelle (hier erfahren Sie mehr über PowerShell-Hashtabellen). Innerhalb der Hashtabelle geben Schlüssel=Wertpaare die Einstellungen an, die die Attribute im Abschnitt „IIS-Sitebindungen“ widerspiegeln:
<bindings>
<binding protocol="http" bindingInformation=":80:TestSite" />
</bindings>
Hier ist nun der Grund, warum wir eine Hashtabelle verwenden: IIS-Konfiguration ist mit zusätzlichen Abschnitten und Attributen vollständig erweiterbar (siehe hier weitere Details). Sie können sich vorstellen, dass jemand das <Binding>-Element mit zusätzlichen Attributen erweitert. Schlüssel-Wert-Paare in einer Hashtabelle bieten die Flexibilität, diese neuen Attribute zu integrieren, ohne das IIS PowerShell-Snap-In vollständig neu schreiben zu müssen.
Die Syntax ist etwas komplexer. Wir denken darüber nach, einige typische Aufgaben wie das Erstellen von Websites mit zusätzlichen Funktionen oder Skripts in eine spätere Tech-Preview aufzunehmen.
Löschen von Sites
Hier erfahren Sie, wie Sie die soeben erstellte Site löschen.
PS IIS:\ >Remove-Item IIS:\Sites\TestSite
Erstellen von Webanwendungen
Das Erstellen von Webanwendungen ist einfacher als das Erstellen von Sites. So geht‘s:
PS IIS:\> New-Item 'IIS:\Sites\Default Web Site\DemoApp' -physicalPath c:\test -type Application
Name ApplicationPool EnabledProtocols PhysicalPath
---- --------------- ---------------- ------------
DemoApp DefaultAppPool http c:\test
Der einzige Parameter, den Sie angeben müssen, ist der Typ (-type), da Sie unter einer Website möglicherweise eine Anwendung oder ein virtuelles Verzeichnis erstellen möchten. Indem Sie den Parameter „-type“ angeben, weisen Sie das IIS-Snap-In an, eine Anwendung zu erstellen.
Um die Anwendung zu löschen, können Sie auch Remove-Item verwenden.
Erstellen virtueller Verzeichnisse
Zum Erstellen eines virtuellen Verzeichnisses verwenden Sie auch das Cmdlet „New-Item“. Erstellen wir nun ein virtuelles Verzeichnis unter der „Standardwebsite“, aber eine zweite unter der Webanwendung, die wir im vorherigen Schritt erstellt haben.
PS IIS:\> New-Item 'IIS:\Sites\Default Web Site\DemoVirtualDir1' -type VirtualDirectory -physicalPath c:\test\virtualDirectory1
Name PhysicalPath
---- ------------
DemoVirtualDir1 c:\test\virtualDirectory1
PS IIS:\> New-Item 'IIS:\Sites\Default Web Site\DemoApp\DemoVirtualDir2' -type VirtualDirectory -physicalPath c:\test\virtualDirectory2
Name PhysicalPath
---- ------------
DemoVirtualDir2 c:\test\virtualDirectory2
Erstellen von Anwendungspools
Aber es wird noch einfacher. Zum Erstellen eines neuen AppPools muss lediglich der Name angegeben werden.
PS IIS:\> new-item AppPools\DemoAppPool
Name State
---- -----
DemoAppPool {}
Einfach, nicht war? Lassen Sie uns dies nun zu einem End-to-End-Szenario zusammensetzen.
Zusammenfassung
Im folgenden End-to-End-Szenario führen wir den folgenden Schritt aus:
- Erstellen Sie eine Reihe neuer Dateisystemverzeichnisse für die Sites, Webanwendungen und virtuellen Verzeichnisse, die wir später erstellen werden.
- Kopieren Sie einige sehr einfache Webinhalte in die neu erstellten Verzeichnisse.
- Erstellen eines neuen Anwendungspools
- Erstellen Sie eine neue Site, eine neue Anwendung und zwei neue virtuelle Verzeichnisse, und weisen Sie sie dem neu erstellten Anwendungspool zu.
- Fordern Sie den Webinhalt über den Webbrowser an.
Schritt 1: Erstellen neuer Verzeichnisse
Wir verwenden das Cmdlet „New-Item“, um vier neue Dateisystemverzeichnisse zu erstellen. Führen Sie die folgenden Befehle aus (verwenden Sie „md“ anstelle von „New-Item“, wenn Sie den Parameter „-type“ nicht angeben möchten):
New-Item C:\DemoSite -type Directory
New-Item C:\DemoSite\DemoApp -type Directory
New-Item C:\DemoSite\DemoVirtualDir1 -type Directory
New-Item C:\DemoSite\DemoVirtualDir2 -type Directory
Schritt 2: Kopieren von Inhalten
Jetzt schreiben wir einige einfache HTML-Inhalte in diese Verzeichnisse:
Set-Content C:\DemoSite\Default.htm "DemoSite Default Page"
Set-Content C:\DemoSite\DemoApp\Default.htm "DemoSite\DemoApp Default Page"
Set-Content C:\DemoSite\DemoVirtualDir1\Default.htm "DemoSite\DemoVirtualDir1 Default Page"
Set-Content C:\DemoSite\DemoVirtualDir2\Default.htm "DemoSite\DemoApp\DemoVirtualDir2 Default Page"
Schritt 3: Erstellen eines neuen Anwendungspools
Erstellen Sie den neuen Anwendungspool „DemoAppPool“ für die neue Site, wenn Sie die im vorherigen Beispiel erstellte Datei gelöscht haben.
New-Item IIS:\AppPools\DemoAppPool
Hinweis
Das obige Cmdlet schlägt fehl, wenn das WebAdministration-Modul nicht importiert wurde. Dazu können Sie das folgende Cmdlet als ersten Schritt eines Skripts mit dem obigen Cmdlet hinzufügen:
Import-Module "WebAdministration"
Schritt 4: Erstellen neuer Sites, Webanwendungen und virtueller Verzeichnisse und Zuweisen zum Anwendungspool
Hier nun das Wichtigste. Wir erstellen DemoSite, DemoApp und zwei virtuelle Verzeichnisse – DemoVirtualDir1 befindet sich direkt unter DemoSite und DemoVirtualDir2 unter DemoApp. Wir weisen DemoSite und DemoApp dem DemoAppPool zu, den wir im vorherigen Schritt erstellt haben. DemoSite wird Port 8080 zugewiesen, um keinen Konflikt mit der „Standardwebsite“ zu verursachen.
New-Item IIS:\Sites\DemoSite -physicalPath C:\DemoSite -bindings @{protocol="http";bindingInformation=":8080:"}
Set-ItemProperty IIS:\Sites\DemoSite -name applicationPool -value DemoAppPool
New-Item IIS:\Sites\DemoSite\DemoApp -physicalPath C:\DemoSite\DemoApp -type Application
Set-ItemProperty IIS:\sites\DemoSite\DemoApp -name applicationPool -value DemoAppPool
New-Item IIS:\Sites\DemoSite\DemoVirtualDir1 -physicalPath C:\DemoSite\DemoVirtualDir1 -type VirtualDirectory
New-Item IIS:\Sites\DemoSite\DemoApp\DemoVirtualDir2 -physicalPath C:\DemoSite\DemoVirtualDir2 -type VirtualDirectory
Voila. Jetzt müssen wir nur noch den Webinhalt anfordern.
Schritt 5: Anfordern des Webinhalts
Sie können natürlich den Browser öffnen und http://localhost:8080/
und alle anderen URLs eingeben. Da es sich jedoch um eine exemplarische PowerShell-Vorgehensweise handelt, verwenden wir dafür PowerShell mit den .NET WebClient-Klassen:
$webclient = New-Object Net.WebClient
$webclient.DownloadString("http://localhost:8080/");
$webclient.DownloadString("http://localhost:8080/DemoApp");
$webclient.DownloadString("http://localhost:8080/DemoVirtualDir1");
$webclient.DownloadString("http://localhost:8080/DemoApp/DemoVirtualDir2");
Wenn Sie es etwas spannender wollen, können Sie auch das Internet Explorer-Objekt selbst verwenden:
$ie = new-object -com InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate("http://localhost:8080/");
Zusammenfassung
In dieser exemplarischen Vorgehensweise haben Sie erfahren, wie Sie Websites, Webanwendungen, virtuelle Verzeichnisse und Anwendungspools mit PowerShell erstellen. Zusätzliche PowerShell-Features wurden verwendet, um ein funktionales End-to-End-Szenario zu erstellen.