Freigeben über


PowerShell-Snap-In: Vornehmen von Konfigurationsänderungen an Websites und App-Pools

von Thomas Deml

In dieser exemplarischen Vorgehensweise lernen Sie, wie Sie einfache Eigenschaften von IIS-Namespacecontainern wie Websites, Webanwendungen, virtuelle Verzeichnisse und Anwendungspools mithilfe von integrierten PowerShell-Cmdlets ändern können. In der nächsten exemplarischen Vorgehensweise wird erläutert, wie Konfigurationseigenschaften in „system.webServer“-Abschnitten und benutzerdefinierten Abschnitten geändert werden.

Einführung

PowerShell-Snap-Ins bieten Namespaces, die mit gängigen, integrierten PowerShell-Cmdlets wie „New-Item“, „Get-Item“, „Get-ChildItems“, „Set-Item“, „Set-ItemProperty“ usw. verwaltet werden können. Die integrierten Cmdlets funktionieren mit allen von PowerShell bereitgestellten Namespaces. Mit New-Item c:\testdir können Sie beispielsweise ein neues Dateisystemverzeichnis erstellen, aber Sie können auch ein neues IIS-Objekt wie eine Website oder einen Anwendungspool erstellen, z. B. New-Item IIS:\AppPools\NewAppPool.

In der vorherigen exemplarischen Vorgehensweise haben wir mit der Verwendung der Cmdlets „New-item“ und „Get-Item“ begonnen. In dieser exemplarischen Vorgehensweise werden weitere der integrierten Cmdlets erläutert.

Es kann vorkommen, dass Sie die Einstellungen für diese Elemente ändern müssen, nachdem Sie sie erstellt haben. Dazu verwenden wir die integrierten Cmdlets „New-ItemProperty“ und „Set-ItemProperty“. Wir werden uns auch ansehen, wie „Get-Item“ und „Set-Item“ verwendet werden.

Diese exemplarische Vorgehensweise basiert auf der Website „Demosite“ und ihren Webanwendungen und virtuellen Verzeichnissen, die wir in der letzten exemplarischen Vorgehensweise erstellt haben.

Anzeigen der Konfigurationseinstellungen

Bevor wir mit dem Ändern von Einstellungen beginnen, möchten wir sie uns zuerst ansehen. Hier ist ein Befehl zum Anzeigen der Konfigurationseinstellungen von „DemoSite“.

PS IIS:\> get-item IIS:\Sites\DemoSite
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
DemoSite         2    Started    c:\demosite                    http :8080:

Dadurch erhalten Sie einen Überblick über die wichtigsten Eigenschaften der Site. Es gibt aber noch weitere Einstellungen, die Sie möglicherweise interessieren.

Hier ist ein Befehl, mit dem Sie weitere Details erhalten:

(Get-ItemProperty IIS:\Sites\DemoSite -Name bindings).Collection

Im obigen Beispiel verwenden wir Klammern, da der „Get-ItemProperty“-Aufruf zuerst ausgewertet werden muss, bevor die Sammlungseinträge ausgegeben werden können. Es ist wie in der Mathematik: Bei (5 + 4) * 3 wird zuerst 5 + 4 ausgewertet und das Ergebnis dann mit 3 multipliziert. In diesem Fall werden die Ergebnisse des „Get-ItemProperty“-Befehls ausgewertet, und das resultierende IIS-Konfigurationsobjekt enthält eine Sammlung, die wir auf dem Bildschirm ausgeben.

Sie können die gleiche Strategie mit anderen Eigenschaften oder Sammlungen wie dem „processModel“-Abschnitt von „AppPools“ verwenden. Beispielsweise gibt der folgende Befehl ein DateTime-Objekt für „startupTimeLimit“ von „DemoAppPool“ zurück:

PS IIS:\> (Get-ItemProperty IIS:\AppPools\DemoAppPool -name processModel).startupTimeLimit

Days              : 0
Hours             : 0
Minutes           : 1
Seconds           : 30
Milliseconds      : 0
Ticks             : 900000000
TotalDays         : 0.00104166666666667
TotalHours        : 0.025
TotalMinutes      : 1.5
TotalSeconds      : 90
TotalMilliseconds : 90000

Ändern der Site- und AppPool-Einstellungen

Es gibt zwei grundlegende Möglichkeiten, um Änderungen vorzunehmen.

  1. Wenn Sie eine einfache Eigenschaft ändern, verwenden Sie „Set-ItemProperty“.
  2. Wenn es sich um eine Sammlung handelt und Sie einen neuen Sammlungseintrag hinzufügen möchten, verwenden Sie „New-ItemProperty“. Bei einer IIS-Standardinstallation ist die Bindungssammlung die einzige Sammlung, die im IIS-Namespace verwendet wird.

„Set-ItemProperty“ und „New-ItemProperty“

Beginnen wir mit dem Hinzufügen einer zusätzlichen Bindung zu unserer „DemoSite“:

PS IIS:\> New-ItemProperty IIS:\sites\DemoSite -name bindings -value @{protocol="http";bindingInform
ation=":8081:"}

PS IIS:\> dir IIS:\Sites
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
Default Web Site 1    Started    f:\inetpub\wwwroot             http *:80:
DemoSite         2    Started    c:\demosite                    http :8080:
                                                                http :8081:

Wie Sie sehen können, lauscht „DemoSite“ jetzt auch auf Port 8081.

Verwenden Sie „Set-ItemProperty“, wenn Sie eine vorhandene Eigenschaft ändern möchten. Ändern Sie zum Beispiel den Namen der Site:

PS IIS:\> Set-ItemProperty IIS:\Sites\DemoSite -name name -value NewDemoSite
PS IIS:\> dir iis:\Sites
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
Default Web Site 1    Started    f:\inetpub\wwwroot             http *:80:
NewDemoSite      2    Started    c:\demosite                    http :8080:
                                                                http :8081:

Stellen wird den alten Namen wieder her:

PS IIS:\> Set-ItemProperty IIS:\Sites\NewDemoSite -name name -value DemoSite

Außerdem möchten wir die Identität ändern, unter der unser Anwendungspool ausgeführt wird. Zuerst müssen wir jedoch einen Benutzer erstellen. Dazu verwenden wir ADSI.

$computer = [ADSI]"WinNT://."
$user = $computer.Create("user", "DemoAppPoolUser")
$user.SetPassword("Secret!!Pw3009")
$user.SetInfo()

Jetzt können wir den „DemoAppPool“ so konfigurieren, dass er unter diesem Benutzer ausgeführt wird:

Set-ItemProperty iis:\apppools\DemoAppPool -name processModel -value @{userName="DemoAppPoolUser";password="Secret!!Pw3009";identitytype=3}

Im Sinne der Erweiterbarkeit verwenden wir eine bewährte Hashtabelle für Eigenschaftsnamen und ihre Werte. Wenn Sie vergessen haben, wie Sie sie verwenden können, nutzen Sie diesen Link.

„Set-Item“ und „Get-Item“

Wir machen das Gleiche, d. h. wir weisen einen Benutzer einem Anwendungspool zu, und zwar mit der Kombination aus „Set-Item“/„Get-Item“. Diese Variante könnte Ihnen etwas besser gefallen, weil Sie damit die Befehlszeilenergänzung nutzen können. Um zu sehen, wie das funktioniert, dürfen Sie die folgenden Befehle nicht kopieren und einfügen. Geben Sie ein paar Zeichen ein, und verwenden Sie die TAB-TASTE, um die Befehlszeilenergänzung zu nutzen:

PS IIS:\AppPools> $demoPool = Get-Item IIS:\AppPools\DemoAppPool
PS IIS:\AppPools> $demoPool.processModel.userName = "DemoAppPoolUser"
PS IIS:\AppPools> $demoPool.processModel.password = "Secret!!Pw3009"
PS IIS:\AppPools> $demoPool.processModel.identityType = 3
PS IIS:\AppPools> $demoPool | Set-Item

Zusammenfassung

In dieser exemplarischen Vorgehensweise haben Sie erfahren, wie Sie PowerShell-Cmdlets verwenden können, um IIS-Namespacecontainer wie Sites und Anwendungspools zu verwalten. Sie haben erfahren, wie Sie Hashtabellen verwenden und die Befehlszeilenergänzung nutzen können. In der nächsten exemplarischen Vorgehensweise erfahren Sie, wie Sie mit IIS-Snap-In-Cmdlets Konfigurationsänderungen an IIS-Konfigurationseinstellungen vornehmen können, die nicht über den IIS-Snap-In-Namespace verfügbar gemacht werden.