> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/de/config/hosting.md).

# Hosting

Sie können PowerShell Universal als Windows-Dienst, in IIS, als Azure Web App oder einfach als eigenständige Anwendung hosten. Wenn Sie unter Windows arbeiten, empfehlen wir entweder einen Windows-Dienst oder IIS.

## Hosting als Windows-Dienst

Um als Windows-Dienst zu hosten, können Sie die PowerShell Universal MSI herunterladen und installieren. Die MSI installiert den PowerShell Universal-Dienst automatisch und startet ihn. Jobs werden standardmäßig unter dem Systemkonto ausgeführt, aber Sie können den Dienst nach der Installation so konfigurieren, dass er unter einem anderen Konto ausgeführt wird.

Nachdem die MSI die Einrichtung abgeschlossen hat, öffnet sich Ihr Standard-Webbrowser mit <http://localhost:5000> zur Anmeldung. Die Standard-Anmeldeinformationen sind auf Admin und ein beliebiges Passwort gesetzt.

### Einen Windows-Dienst manuell konfigurieren

Sie müssen die MSI nicht verwenden, um Universal als Windows-Dienst zu konfigurieren. Sie können dies auch manuell mit dem folgenden PowerShell-Skript tun.

```powershell
New-Service -Name "PowerShellUniversal" -BinaryPathName "Universal.Server.exe --service" -Description "PowerShell Universal server service." -DisplayName "PowerShell Universal" -StartupType Automatic
Start-Service PowerShellUniversal
```

## Hosting in Azure

Lesen Sie unseren [Azure-Hosting-Leitfaden](/powershell-universal/de/config/hosting/azure.md).

## Manuelles Hosting

Sie können den Universal-Server auch als eigenständige Anwendung hosten. Führen Sie einfach die `Universal.Server.exe` aus dem Binärverzeichnis aus, um die [Kestrel-Webserver-Implementierung in ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1) zu nutzen und den Webserver zu starten.

## Webserver-Konfiguration

{% hint style="info" %}
Dieser Abschnitt gilt für Universal, wenn es außerhalb von IIS gehostet wird.
{% endhint %}

### Port und Listening-Adresse festlegen

Sie können den Port des Universal-Servers festlegen, indem Sie die Datei `appsettings.json` bearbeiten. Wir empfehlen, eine `appsettings.json`-Datei im [Standard-Konfigurationsordner](/powershell-universal/de/readme.md) zu erstellen.

**Windows**

`%ProgramData%\PowerShellUniversal`

**Linux**

`%HOME%/.PowerShellUniversal`

Um den Port festzulegen, ändern Sie den Abschnitt der Kestrel-Endpunkte in der `appsettings.json`. Standardmäßig ist die Konfiguration so definiert, dass sie auf Port 5000 und auf jeder Adresse lauscht.

```javascript
    "Kestrel": {
    "Endpoints": {
      "HTTP": {
        "Url": "http://*:5000"
      }
    }
  },
```

### HTTPS konfigurieren

Um HTTPS zu konfigurieren, können Sie die Datei `appsettings.json` anpassen, um ein bestimmtes Zertifikat und einen bestimmten Port zu verwenden. Die folgende Konfiguration verwendet die Datei `testCert.pfx` und `testPassword` und lauscht auf Port 5463.

#### PFX-Zertifikate

```javascript
{
  "Kestrel": {
    "Endpoints": {
       "HTTP": { "Url": "http://*:5000" },
           "HTTPS": {
              "Url": "https://*:5463",
              "Certificate": {
                  "Path": "testCert.pfx",
                  "Password": "testPassword"
              }
          }
    }
}
```

#### Zertifikatspeicher

Um ein Zertifikat an einem bestimmten Ort und in einem bestimmten Speicher zu konfigurieren, können Sie eine Konfiguration wie diese verwenden. Wenn Sie das Zertifikat nach Antragstellername auswählen, stellen Sie sicher, dass Sie den Common Name ohne das Präfix `CN=` verwenden.

```javascript
{
  "Kestrel": {
    "Endpoints": {
      "HTTPS": {
         "Url": "https://*:443",
           "Certificate": {
             "Subject": "windows-server.ironman.local",
             "Store": "My",
             "Location": "LocalMachine",
             "AllowInvalid": "true"
           }
      }
   }
}
```

Location kann entweder `CurrentUser` oder `LocalMachine` sein.

#### Zertifikatspeicher nach Fingerabdruck

Sie können in Version 3.4 und später den Fingerabdruck anstelle des Antragstellers verwenden.

```powershell
{
  "Kestrel": {
    "Endpoints": {
      "HTTPS": {
         "Url": "https://*:443",
           "Certificate": {
             "Thumbprint": "SDFSDFSDFSDFSDFSDFSDFFSD",
             "Store": "My",
             "Location": "LocalMachine",
             "AllowInvalid": "true"
            }
         }
      }
   }
}
```

#### PEM- und Key-Zertifikate

Einige Anbieter, wie Let's Encrypt und GoDaddy, stellen Zertifikate als PEM- und Key-Textdateien aus. Sie können diese Zertifikatstypen direkt mit dem Kestrel-Webserver verwenden. Sie müssen den Abschnitt `HttpsFromPem` innerhalb der `Endpoints` für Kestrel angeben.

```json
{
  "Kestrel": {
    "Endpoints": {
      "HTTP": {
        "Url": "http://*:5000"
      },
      "HttpsFromPem": {
        "Url": "https://*:5001",
        "Certificate": {
          "Path": "C:\\Users\\adamr\\Desktop\\cert.pem",
          "KeyPath": "C:\\Users\\adamr\\Desktop\\key.pem"
        }
      }
    },
    "RedirectToHttps": "true"
  },
}
```

#### Berechtigungen

Unter Windows benötigt der Benutzer, der den PowerShell Universal-Dienst ausführt, Zugriff auf das Zertifikat, um HTTPS-Unterstützung ordnungsgemäß bereitzustellen. Dies ist typischerweise ein Problem, wenn der Dienst ein Group Managed Service Account verwendet. Sie können das folgende PowerShell-Skript verwenden, um die richtigen Berechtigungen zu erteilen.

```powershell
$thumbprint = "<<THUMBPRINT>>"
$certPath = "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys"
$cert = Get-ChildItem -Path Cert:\LocalMachine\My\$thumbprint
$acl = Get-Acl -Path (Join-Path $certPath $cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName)
$gmSaAccount = "Domain\<<GMSA_Account>>$"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($gmSaAccount, "Read", "Allow")
$acl.SetAccessRule($accessRule)
Set-Acl -Path (Join-Path $certPath $cert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName) -AclObject $acl
```

### Protokoll

Standardmäßig lauscht Universal auf HTTP1 und HTTP2. Sie können die Protokolle, auf die der Server lauscht, anpassen, indem Sie die Eigenschaft Protocols setzen. Beispielsweise können Sie mit der folgenden Einstellung gezielt HTTP1- und HTTP2-Unterstützung festlegen.

```javascript
"Kestrel": {
  "Endpoints": {
    "HTTP": {
      "Url": "http://*:5000",
      "Protocols": "Http1AndHttp2"
    }
  },
  "RedirectToHttps": "false"
},
```

Einige Versionen von Windows Server (wie 2012R2) unterstützen HTTP2 nicht. Um die HTTP2-Unterstützung zu deaktivieren, setzen Sie den Listener so, dass er nur auf HTTP1 lauscht.

```javascript
"Kestrel": {
  "Endpoints": {
    "HTTP": {
      "Url": "http://*:5000",
      "Protocols": "Http1"
    }
  },
  "RedirectToHttps": "false"
},
```

Für einen vollständigen Satz an Listening-Optionen können Sie die [ASP.NET Core-Dokumentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#listenoptionsusehttps) zurate ziehen.

### Sicherheitsheader

Organisationen können verlangen, dass PowerShell Universal bestimmte Sicherheitsheader in HTTP-Antworten vom Server bereitstellt, dazu können gehören:

* Strict-Transport-Security
* Content-Security-Policy
* X-Frame-Options
* X-Content-Type-Options
* X-XSS-Protection
* Referrer-Policy

Sie können den Abschnitt Kestrel \ Headers verwenden, um diese Werte zu definieren.

```json
{
    "Kestrel" : {
       "Headers": {
          "X-Content-Type-Options": "nosniff",
          "Content-Security-Policy": "default-src 'self';",
          "X-XSS-Protection": "block",
          "X-Frame-Options": "DENY"
       }
    }
}
```

{% hint style="warning" %}
Seien Sie beim Konfigurieren dieser Header vorsichtig, da sie das Verhalten jeder von PowerShell Universal zurückgegebenen Webanfrage ändern.
{% endhint %}

## Beispiel: Selbstsigniertes Zertifikat

In diesem Beispiel zeigen wir, wie ein selbstsigniertes Zertifikat erstellt und mit PowerShell Universal verwendet wird.

Erstellen Sie zunächst ein selbstsigniertes Zertifikat und speichern Sie es in Ihrem lokalen Computerspeicher. Sie müssen PowerShell als Administrator ausführen. Der lokale Computerspeicher ist erforderlich, da PowerShell Universal möglicherweise als Dienst und nicht unter Ihrem Konto ausgeführt wird.

```powershell
New-SelfSignedCertificate -DnsName localhost -CertStoreLocation cert:\LocalMachine\My
```

Als Nächstes müssen Sie PowerShell Universal so konfigurieren, dass es das Zertifikat verwendet. Dies kann durch Bearbeiten oder Erstellen der Datei `appsettings.json` in `%ProgramData%\PowerShellUniversal` erreicht werden. Diese Datei sollte bereits vorhanden sein, wenn Sie mit dem MSI-Installer installiert haben. Der Inhalt der Datei sollte den DNS-Namen Ihres Zertifikats und den Speicherort enthalten.

Für selbstsignierte Zertifikate müssen Sie die Option `AllowInvalid` einschließen.

```json
{
  "Kestrel": {
    "Endpoints": {
      "HTTPS": {
         "Url": "https://*:443",
           "Certificate": {
             "Subject": "localhost",
             "Store": "My",
             "Location": "LocalMachine",
             "AllowInvalid": "true"
           }
      }
   }
}
```

Nachdem Sie die Datei `appsettings.json` aktualisiert haben, starten Sie den PowerShell Universal-Dienst neu. Sie sollten nun auf Ihre PowerShell Universal-Website unter `https://localhost` zugreifen können.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/de/config/hosting.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
