> 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/getting-started/upgrading.md).

# Opgradering

Opgrader PowerShell Universal sikkert ved at sikkerhedskopiere data, følge opgraderingstrin for MSI, IIS, ZIP eller modul og validere serveren for brudændringer.

## Oversigt

Dette dokument vil dække opgraderingsprocessen for PowerShell Universal-instanser i produktion. Vi vil dække følgende emner.

1. Datasikkerhedskopi
2. Opgraderingsproces
3. Opgraderingsvalidering

De binære filer til Universal-programmet kan generelt opgraderes uden at skulle ændre konfigurationen eller databasen manuelt, men vi anbefaler sikkerhedskopier af produktionsdata.

## Anbefalinger

Til produktionsmiljøer anbefaler vi at udrulle PowerShell Universal til et midlertidigt miljø eller et udviklingsmiljø før større opgraderinger. Dette giver mulighed for test, før slutbrugere påvirkes. De kan bruge [Udviklingslicenser ](/powershell-universal/da/licensing.md#developer-license)til at teste ændringer i PowerShell Universal-instanser uden at købe en anden licens.

## 1. Sikkerhedskopiering af data

PowerShell Universal bruger et scriptbaseret konfigurationssystem sammen med en database, der bruges til bevarelse af entiteter som app-tokens, jobhistorik og identiteter. Hvis det er muligt, bør De sikkerhedskopiere disse elementer, før De kører en opgradering, med henblik på nem tilbagerulning, hvis der opstår et problem under valideringen.

### Database

Sikkerhedskopiering af databasen sikrer, at alle app-tokens, jobhistorik, identiteter og databasehemmeligheder bevares i tilfælde af en mislykket opgradering. SQL-databaser kan også justere databasens skema og kan kræve en tilbagerulning af ikke kun dataene, men også skemaet for tabellerne i databasen.

#### SQLite

Som standard bruger PowerShell Universal en database i én fil, der kaldes SQLite. Medmindre andet er konfigureret, gemmes databasen i `%ProgramData%\UniversalAutomation`. De bør have en `database.db` og muligvis en `database-log.db`. Begge disse filer bør sikkerhedskopieres. Tjenesten skal stoppes for at sikkerhedskopiere filerne.

#### SQL

Når SQL bruges til persistens, sikkerhedskopier hele databasen (herunder skemaet). Der er ikke nødvendigvis behov for at stoppe PowerShell Universal-tjenesten, når databasen sikkerhedskopieres, men den kan fortsætte med at skrive til databasen (for eksempel når der køres planlagte job), efter at sikkerhedskopieringen er fuldført.

### Konfigurationsscripts

Scripts udgør de primære konfigurationsdata, der skal sikkerhedskopieres, når en PowerShell Universal-instans i produktion opgraderes. Til produktion anbefaler vi at bruge et versionsstyringssystem. De kan også gøre brug af den indbyggede git-integration. Hvis De bruger tovejs-synkronisering til git-integrationen i PowerShell Universal, bør De overveje at sætte et tag på Deres git-branch før opgraderingen, så De nemt kan rulle uventede ændringer i git-lageret tilbage.

## 2. Opgraderingsfremskridt

Nedenfor er afsnit for hver type systemopgradering og de trin, De bør følge, baseret på hvordan De oprindeligt installerede PSU.

### MSI

Når De installerer via MSI'en, bør De følge de samme sikkerhedskopieringsprocedurer ovenfor.

#### appsettings.json

De bør sikkerhedskopiere filen `appsettings.json`, der er gemt i `%ProgramData%\PowerShellUniversal`. Denne fil indeholder oplysninger som port, placering af datalagring og andre serverindstillinger. MSI-pakken foretager typisk ikke ændringer af denne fil, når den først er oprettet. Den bruger de indstillinger, der findes til den opgraderede version. Når det er sagt, foretager MSI-pakken om nødvendigt ændringer af appsettings-filen. Disse ændringer betragtes som brudændringer og anføres i ændringsloggen for udgivelsen.

#### Tjenestekonto

Når der køres en MSI-opgradering, afinstalleres PSU-tjenesten ikke, og tjenestekontoen er derfor stadig angivet, når tjenesten starter.

{% hint style="info" %}
Hvis De udfører en afinstallation og derefter en installation ved hjælp af MSI'en, fjernes tjenestekontoen.
{% endhint %}

#### Opgraderingsproces

Når alle konfigurationsfilerne og databasen er sikkerhedskopieret, kan De køre det nye MSI-installationsprogram.

Installationsprogrammet kan bede om en genstart af maskinen, hvis filer er låst. PSU-MSI'en afinstallerer alle filerne i installationskataloget og installerer helt nye filer.

Når MSI'en er fuldført, kan De gå til Deres PowerShell Universal-admin console for at udføre installationsvalidering.

### IIS

Nedenfor finder De oplysninger om opgradering af en IIS-installation.

#### web.config

Ud over de filer, der er anført til sikkerhedskopiering ovenfor, bør De også overveje at sikkerhedskopiere Deres `web.config`-fil. Hvis De ikke har foretaget ændringer i denne fil, behøver De ikke at sikkerhedskopiere den.

Filen `web.config`, der medfølger i programmets installationskatalog, overskrives under opgraderinger. Hvis De har flyttet filen web.config til en alternativ placering, overskrives den ikke. Når De opretter et IIS-websted, kan De blot medtage filen `web.config` i webprogrammets katalog og have [de binære filer gemt på en anden placering](/powershell-universal/da/config/hosting/hosting-iis.md).

#### Opgraderingsproces

Når De opgraderer med IIS, skal De først stoppe Deres programpulje for at sikre, at de binære filer, som IIS bruger, ikke længere er i brug, og derefter erstatte de binære filer med de nye. For at sikre, at opgraderingen fungerer som forventet, anbefales det at slette alle programfilerne og derefter udpakke de nye i den samme mappe for at undgå assemblykonflikter.

{% hint style="info" %}
Som ved enhver installation fra en ZIP-fil skal De sørge for at køre `Get-ChildItem -Recurse | Unblock-File` fra en kommandoprompt med administratorrettigheder på tværs af PowerShell Universal-filerne for at sikre, at de kan køres korrekt.
{% endhint %}

Når De har kopieret de nye filer og fjernet blokeringen af dem, skal De starte programpuljen, gå til PowerShell Universal Admin Console og udføre installationsvalidering.

### Universal-modul

Universal-modulet kan bruges til at opgradere installationer af PowerShell Universal, der tidligere er installeret af modulet.

{% hint style="warning" %}
Brug ikke Universal-modulet til at opgradere instanser, der er installeret via MSI.
{% endhint %}

Følg sikkerhedskopieringsprocedurerne ovenfor, og udfør derefter opgraderingen.

Opgrader først det lokale PowerShell Universal-modul, og kontrollér, at den forventede version er installeret.

```powershell
Update-Module Devolutions.PowerShellUniversal
Import-Module Devolutions.PowerShellUniversal -PassThru
```

Kør derefter `Update-PSUServer` for at downloade og pakke den nye PSU-instans ud.

```powershell
Update-PSUServer
```

Når opgraderingen er fuldført, skal De gå til PowerShell Universal Admin Console og begynde opgraderingsvalideringen.

### ZIP

Udfør de nødvendige sikkerhedskopieringsprocedurer, og download den seneste ZIP af PowerShell Universal.

Stop PowerShell Universal-tjenesten. Slet de eksisterende PowerShell Universal-programfiler. Udpak ZIP-filerne til det samme katalog. Kør til sidst `Unblock-File` mod kataloget for at sikre, at PSU kan køre korrekt. Kør altid denne kommando som administrator.

```powershell
Get-ChildItem -Recurse | Unblock-File
```

Når opgraderingen er fuldført, skal De gå til PowerShell Universal Admin Console og begynde opgraderingsvalideringen.

### Database

Som standard migrerer PSU-tjenesten til den nyeste databaseversion under startprocessen.

Databasen kan også opgraderes, før programmet opgraderes. Dette anbefales for større installationer, der kan kræve noget tid, før skemaopdateringen finder sted. I nogle miljøer kan det, at tjenesten får lov til at opgradere databasen, medføre en timeout, ligesom med Service Control Manager i Windows.

Hvis De bruger SQL, kan De finde SQL-filer, der er genereret og placeret i SQL-mappen i PSU-installationsmediet. Kør disse scripts mod Deres database, før De opgraderer.

Alle typer databaser understøtter kommandolinjeværktøjet `psu` til opgraderinger.

```powershell
psu db schema latest --connection-string "Data Source=C:\ProgramData\UniversalAutomation\database.db"
```

## 3. Opgraderingsvalidering

Når De har kørt en opgradering, bør De udføre grundlæggende validering af Deres PSU-server for at sikre, at den er fuldt funktionsdygtig.

### Meddelelser

Kontrollér, at der ikke er fejl i meddelelsesrullemenuen. Fejlene kan være et tegn på problemer under opgraderingen.

### Moduler

Opgraderinger af PowerShell Universal kan ændre assemblyversioner af DLL-filer, der leveres med platformen. Dette kan medføre, at andre moduler ikke kan indlæses. Selvom dette muligvis ikke er tydeligt i starten, kan De overveje at foretage en opgørelse over moduler, der bruges på Deres platform, for at sikre, at versionerne er ensartede før og efter opgraderingen og dermed begrænse ændringer.

Hvis De har installeret en version af modulet `Universal` uden for PowerShell Universal (for eksempel med `Install-Module`), skal De sørge for at opdatere modulet, ellers kan det komme i konflikt med det nye, der er installeret med PowerShell Universal.

### Apps

Opgraderingsproblemer skyldes oftest ændringer i Universal App-frameworket. Apps kan være komplekse, og fejlrettelser eller funktioner kan nogle gange give problemer for en bestemt brugers app, samtidig med at de retter problemer, der vedrører en anden brugers app. Læs ændringsloggen før opgraderingen for at forstå konsekvenserne af ændringerne i app-frameworket, og overvej at teste appen med udviklingsdata, før De opgraderer i produktion.

## Almindelige opgraderingsproblemer

### IIS-programpuljen starter ikke efter opgradering

Det mest almindelige opgraderingsproblem er, at `Unblock-File` ikke kaldes korrekt på de udpakkede filer, når der udføres en opgradering af en IIS ZIP-installation. Sørg også for at køre kommandoen `Unblock-File` rekursivt og inde fra en administrativ session.

Et andet problem med kommandoen er at udpakke filerne oven på de eksisterende filer. Dette kan forårsage assemblykonflikter og sætter programmet i en ukendt tilstand. Følg IIS-opgraderingsdokumentationen, og slet filerne, før De udpakker dem.

### Command Not Found-fejl

Når ny funktionalitet føjes til PowerShell Universal, sker det typisk ved hjælp af nye cmdlets. Hvis ældre versioner af PowerShell Universal-modulet er installeret på systemet, kan det forårsage konflikter med det modul, der leveres med installationsmediet. Sørg for, at De har fjernet ældre versioner af modulet `Universal`, hvis De støder på disse fejl.

### Fejl "Table\Column Not Found" ved brug af SQL-persistens

Dette kan ske, hvis opgraderinger af SQL-skemaet ikke køres under opgraderinger. Hvis De angiver indstillingen `RunMigrations` til `false` i `appsettings.json`, skal De køre migreringerne manuelt, ellers fungerer PowerShell Universal-tjenesten ikke korrekt.

### Brydende ændring af appkomponent

Disse ændringer kan være visuelle eller funktionelle. Sørg for at gennemgå ændringsloggen for elementer, der kan være relateret til den ændring, De ser. Overvej at skrive i foraene eller oprette en GitHub-issue for at se, om problemet er som designet, og om der findes en brugbar midlertidig løsning.

{% hint style="info" %}
Vi gør vores yderste for at understøtte alles apps uden brudændringer. Når det er sagt, er hver konfiguration ret unik, så vi hjælper meget gerne med problemer, De måtte støde på. Giv os endelig meddelelse.
{% endhint %}

### Licensproblemer efter opgradering

Licensmodellen for PowerShell Universal giver licenserede brugere mulighed for at opgradere til den nyeste version, så længe de har en aktiv evigvarende licens eller abonnementslicens. Hvis De forsøger at opgradere en server, der ikke længere ligger inden for licensvinduet, fungerer serveren ikke som forventet. De skal nedgradere tilbage til den forrige version for at gendanne funktionaliteten.

Derudover kan De støde på problemer på grund af genstarten af PSU-tjenesten. Når tjenesten starter, verificerer den status for licensabonnementet. Hvis det mislykkes, er den muligvis ikke korrekt licenseret og kan forårsage andre problemer. Den grundlæggende årsag er typisk netværksproblemer under forsøg på at få adgang til webstederne IronmanSoftware.com eller Devolutions.net med henblik på aktivering. Offline-licensnøgler bruger ikke internettet og støder ikke på dette problem.

Hvis De oplever et problem med en licens, som De ikke kan løse, tøv ikke med at kontakte [Devolutions Support](mailto:service@devolutions.net).

### Blandede versioner

Blanding af versioner af PowerShell Universal-servere med den samme database kan forårsage problemer, da skemaændringer mellem databasen eller protokolændringer i interne API'er kan være uoverensstemmende. Vi anbefaler, at De faseinddeler Deres opgraderinger, så De i sidste ende kører alle PowerShell Universal-servere i den samme version.

{% hint style="warning" %}
Der er et kendt kompatibilitetsproblem mellem PSU 5.5.4 og tidligere og PSU 5.6.0 og nyere. Vi anbefaler ikke at blande disse versioner. Planlægning af jobs kan mislykkes på eksisterende 5.5.4-servere, når de kombineres med 5.6.0-servere.
{% endhint %}

## 5.0-brudændringer

### Fjernelse af sider

Træk og slip-sidedesigneren er blevet fjernet til fordel for [Portal Pages](/powershell-universal/da/portal/portal-pages.md) og [Widgets](/powershell-universal/da/portal/portal-widgets.md).

### Fjernelse af appsidedesigneren

Sidedesigneren med træk og slip til apps er blevet fjernet. Apps, der er oprettet med designeren, fungerer stadig.

### Fjernelse af adgangskontroller

Adgangskontroller er blevet fjernet til fordel for [Tilladelser](/powershell-universal/da/sikkerhed/enterprise-security/permissions.md). De kan også bruge [Portal ](/powershell-universal/portal/portal.md)til at tildele ressourcer, f.eks. scripts, til brugere uden behov for komplicerede tilladelser.

### Ændringer af cmdlet-kommunikationskanal og autorisation

Før v5 ville cmdlets sende data via HTTP eller ved hjælp af en intern gRPC-kanal. Nu bruger alle cmdlets en udadvendt gRPC Channel, der er beskyttet af godkendelse og autorisation. Den bruger ikke længere standard HTTP-kald til REST API.

Dette kan være et problem for PowerShell Universal-instanser bag [omvendte proxyer](/powershell-universal/da/config/hosting/reverse-proxy.md) og kræver, at de korrekte headerværdier sendes.

Gennemgå venligst [Module ](/powershell-universal/da/config/module.md)dokumentationen for at få flere oplysninger.

#### Almindelige cmdlet-fejl, som De kan støde på under opgradering

#### HTTP-statuskode 403

Den cmdlet, De kalder, har ikke adgang til PowerShell Universal-API'erne. De skal angive parameteren -AppToken på cmdlet'erne for at bruge dem.

De kan også aktivere den [tilladende API-sikkerhedsmodel](/powershell-universal/da/config/module.md#authorization-security-model) for at tillade cmdlets, der kaldes internt fra PowerShell Universal, uden behov for autorisation.

#### URI ikke defineret

Cmdletterne kan ikke afgøre, hvordan PowerShell Universal-API'erne skal kaldes. De skal enten angive parameteren -ComputerName eller opsætte API-URL'en i appsettings.json.

```json
{
   "API" : {
      "URL": "http://localhost:5000"
   }
}
```

#### SSL-certifikatfejl

Hvis De bruger et selvsigneret certifikat, skal De angive parameteren `-TrustCertificate` på cmdletterne.

### PowerShell 7-miljøet bruger ikke længere Pwsh.exe

Standardmiljøet for PowerShell 7 bruger en .NET-version af den eksekverbare fil Universal.Agent.exe, der kører PowerShell 7.5. Det giver den største kompatibilitet med PowerShell Universal-biblioteker og andre moduler.

Det er stadig muligt at bruge pwsh.exe-processen i brugerdefinerede miljøkonfigurationer.

### IIS-hostingpakke

Hvis De hoster i IIS, skal De sørge for at installere [.NET 9.0-hostingpakken](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/runtime-aspnetcore-9.0.4-windows-hosting-bundle-installer).

### Integreret miljøs PowerShell-version

Det integrerede miljø bruger nu PowerShell 7.5.

### SQLite som standard

SQLite er standardmetoden til persistens. De skal udføre en manuel konvertering fra LiteDB, før De installerer version 5.

### LiteDB-understøttelse fjernet

LiteDB er blevet fjernet som understøttet databasemotor. Blandt installationsfilerne til PowerShell Universal finder De `psu.exe`. Den kan bruges til at konvertere en LiteDB-database til en SQLite-database. Brug følgende kommandolinje.

```powershell
.\psu.exe db convert --Path "$ENV:ProgramData\UniversalAutomation\database.db"
```

Værktøjet opretter en `database.bak`-fil, før konverteringen udføres. Forløbet rapporteres i konsollen.

Når De har konverteret databasen, skal De opdatere filen `appsettings.json`, så den bruger det nye SQLite-plugin, og opdatere forbindelsesstrengen til et SQLite-format. Nedenfor er et uddrag, som De kan anvende på Deres konfigurationsfil.

```json
{
    "Plugins": [
        "SQLite"
    ],
    "Data": {
        "ConnectionString": "Data Source=C:\\ProgramData\\UniversalAutomation\\database.db"
    }
}
```

#### Konvertering af en database til en MSI-opgradering

For at installationsprogrammet til PowerShell Universal kan køre korrekt, skal De opdatere databasen, før De kører MSI-installationsprogrammet. Nedenfor er de trin, der skal udføres for at gøre det.

1. Download ZIP-pakken til Windows, og udpak den til et lokalt katalog.
2. Stop PowerShell Universal-tjenesten
3. Kør kommandoen psu.exe fra ZIP-kataloget, som anført ovenfor, for at konvertere databasefilen i %ProgramData%\UniversalAutomation
4. Opdater filen %ProgramData%\PowerShellUniversal\appsettings.json, så den bruger SQLite-pluginnet i stedet for LiteDB-pluginnet
5. Kør installationsprogrammet til PowerShell Universal v5 for at opgradere programfilerne.

### Desktop-tilstand fjernet

Desktop-tilstand er blevet fjernet. Ressourcer som genvejstaster, filtilknytninger og genveje understøttes ikke længere. MSI-pakken understøtter nu installationer med omfanget User, der kører som den aktuelle bruger og starter ved logon.

### Install-PSUServer på Windows installerer fra MSI'en

I tidligere versioner af PowerShell Universal installerede denne kommando til et katalog og oprettede tjenesten manuelt. Denne kommando installerer nu fra MSI. Hvis De tidligere har installeret med dette modul, skal De fjerne den eksisterende installation med en tidligere version af modulet og derefter installere med den nye version af modulet.

```powershell
Install-Module Universal -RequiredVersion 4.4.0
Remove-PSUServer
```

Åbn en ny kommandoprompt, og kør følgende.

```powershell
Uninstall-Module Devolutions.PowerShellUniversal
Install-Module Devolutions.PowerShellUniversal
Install-PSUServer
```

### Git-databaselager fjernet

PowerShell Universal understøtter ikke længere lagring af git-lageret direkte i databasen. Vi anbefaler at bruge en ekstern git-udbyder som GitHub, GitLab eller Gitea. PowerShell Universal v5 understøtter lokale git-lagre uden behov for at synkronisere til et fjernlager. Dette giver mulighed for at gemme filhistorik direkte på PowerShell Universal-serveren.

### Fjernet Heatmap og Marker Cluster fra New-UDMap

Kort understøtter ikke længere varmekort eller markørklynger.


---

# 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/getting-started/upgrading.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.
