> 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/da/config/hosting.md).

# Hosting

Host PowerShell Universal som en Windows-tjeneste, i IIS, i Azure eller enkeltstående, og konfigurer Kestrel-porte, HTTPS-certifikater og sikkerhedsoverskrifter.

De kan hoste PowerShell Universal som en Windows-tjeneste, i IIS, som en Azure Web App eller blot som et selvstændigt program. Hvis De kører på Windows, foreslår vi enten en Windows-tjeneste eller IIS.

## Hosting som en Windows-tjeneste

For at hoste som en Windows-tjeneste kan De downloade og installere MSI'en til PowerShell Universal. MSI'en installerer automatisk PowerShell Universal-tjenesten og starter den. Job kører som standard under systemkontoen, men De kan konfigurere tjenesten til at køre under en anden konto efter installationen.

Når MSI-installationen er fuldført, åbnes Deres standardwebbrowser på <http://localhost:5000> til logon. Standardlogonlegitimationsoplysningerne er angivet til Admin og en vilkårlig adgangskode.

### Konfiguration af en Windows-tjeneste manuelt

De behøver ikke at bruge MSI'en til at konfigurere Universal som en Windows-tjeneste. De kan også gøre det manuelt med følgende PowerShell-script.

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

## Hosting i Azure

Læs vores [Azure-hostingvejledning](/powershell-universal/da/config/hosting/azure.md).

## Hosting manuelt

De kan også hoste Universal-serveren som et enkeltstående program. Kør blot `Universal.Server.exe` fra binærkataloget for at bruge [implementeringen af Kestrel-webserveren i ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1) til at starte webserveren.

## Webserverkonfiguration

{% hint style="info" %}
Dette afsnit gælder for Universal, når det hostes uden for IIS.
{% endhint %}

### Angivelse af porten og lytteadressen

De kan angive porten for Universal-serveren ved at ændre filen `appsettings.json`. Vi anbefaler, at De opretter en `appsettings.json`-fil i [standardkonfigurationsmappen](/powershell-universal/da/readme.md).

**Windows**

`%ProgramData%\PowerShellUniversal`

**Linux**

`%HOME%/.PowerShellUniversal`

For at angive porten skal De ændre sektionen Kestrel endpoints i `appsettings.json`. Som standard er konfigurationen defineret til at lytte på port 5000 og på enhver adresse.

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

### Konfiguration af HTTPS

For at konfigurere HTTPS kan De justere filen `appsettings.json`, så den bruger et bestemt certifikat og en bestemt port. Nedenstående konfiguration bruger filen `testCert.pfx` og `testPassword` og lytter på port 5463.

#### PFX-certifikater

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

#### Certifikatlager

Hvis De vil konfigurere et certifikat på en bestemt placering og i et bestemt lager, kan De bruge en konfiguration som denne. Når De vælger certifikatet efter emnenavn, skal De bruge fællesnavnet uden præfikset `CN=`.

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

Placeringen kan enten være `CurrentUser` eller `LocalMachine`.

#### Certifikatlager efter tommelfingeraftryk

De kan bruge tommelfingeraftryk i stedet for emne i version 3.4 og nyere.

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

#### PEM- og nøglecertifikater

Nogle udbydere, som Let's Encrypt og GoDaddy, vil udstede certifikater som PEM- og nøgle-tekstfiler. De kan bruge disse typer certifikater direkte med Kestrel-webserveren. De skal angive sektionen `HttpsFromPem` under `Endpoints` for Kestrel.

```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"
  },
}
```

#### Tilladelser

På Windows skal den bruger, der kører PowerShell Universal-tjenesten, have adgang til certifikatet for at kunne levere HTTPS-understøttelse korrekt. Dette er typisk et problem, hvis tjenesten bruger en Group Managed Service Account. De kan bruge følgende PowerShell-script til at give de rette tilladelser.

```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
```

### Protokol

Som standard lytter Universal på HTTP1 og HTTP2. De kan justere de protokoller, som serveren lytter på, ved at angive egenskaben Protocols. De kan f.eks. specifikt angive understøttelse af HTTP1 og HTTP2 med følgende indstilling.

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

Nogle versioner af Windows Server (f.eks. 2012R2) understøtter ikke HTTP2. For at deaktivere understøttelse af HTTP2 skal De angive lytteren til kun at lytte på HTTP1.

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

For et komplet sæt lytteindstillinger kan De se [ASP.NET Core-dokumentationen](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#listenoptionsusehttps).

### Sikkerhedsheadere

Organisationer kan kræve, at PowerShell Universal leverer visse sikkerhedsheadere i HTTP-svar, der kommer fra serveren, disse kan omfatte:

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

De kan bruge sektionen Kestrel \ Headers til at definere disse værdier.

```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" %}
Vær forsigtig, når De konfigurerer disse headere, da de ændrer funktionsmåden for hver webanmodning, der returneres af PowerShell Universal.
{% endhint %}

## Eksempel: selvsigneret certifikat

I dette eksempel vil vi vise, hvordan De opretter et selvsigneret certifikat og bruger det sammen med PowerShell Universal.

Opret først et selvsigneret certifikat, og gem det i Deres lokale computerlager. De skal køre PowerShell som administrator. Det lokale computerlager er påkrævet, fordi PowerShell Universal muligvis kører som en tjeneste og ikke som Deres konto.

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

Derefter skal De konfigurere PowerShell Universal til at bruge certifikatet. Det kan gøres ved at redigere eller oprette filen `appsettings.json` i `%ProgramData%\PowerShellUniversal`. Denne fil bør allerede findes, hvis De installerede med MSI-installationsprogrammet. Filens indhold bør indeholde DNS-navnet på Deres certifikat og placeringen.

For selvsignerede certifikater skal De medtage indstillingen `AllowInvalid`.

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

Når De har opdateret filen `appsettings.json`, skal De genstarte PowerShell Universal-tjenesten. De bør nu kunne få adgang til Deres PowerShell Universal-websted på `https://localhost`.

### Se også

* [Devolutions Academy – Oprettelse af et grundlæggende slutpunkt](https://academy.devolutions.net/student/activity/3466014-creating-a-basic-endpoint)


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
