> 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/apps/interaction.md).

# Interaktion

Byg interaktive PowerShell Universal-apps ved hjælp af browserens lokale lager, udklipsholder, hentninger, toast, modal, JavaScript-cmdlets og PowerShell-værtsfunktioner.

```powershell
Invoke-UDRedirect https://devolutions.net/powershell-universal/
```

Universal Apps giver mulighed for at oprette interaktive websteder med PowerShell. Flere cmdlets giver feedback til brugeren, opdaterer komponenter, læser komponenttilstand og gemmer browserlokale præferencer.

## Udklipsholder

De kan angive strengdata i brugerens udklipsholder med `Set-UDClipboard`.

```powershell
New-UDButton -Text 'Clipboard' -OnClick {
    Set-UDClipboard -Data 'Hello, there!'
}
```

#### API

* Set-UDClipboard

## Downloads

De kan starte en download i brugerens browser ved hjælp af `Start-UDDownload`. På grund af browsersikkerhed skal brugeren foretage en handling, f.eks. at klikke på en knap, for at tillade downloaden. `Start-UDDownload` er ikke egnet til download af store filer.

```powershell
New-UDButton -Text 'Download' -OnClick {
    Start-UDDownload -StringData 'Hello, World!'
}
```

## Lokalt lager

Brug `Set-UDLocalStorage` og `Get-UDLocalStorage` til at bevare en brugers apppræferencer i browserens lokale lager. Værdierne forbliver tilgængelige efter en genindlæsning af siden, og når brugeren senere åbner den samme app i den samme browserprofil.

PowerShell Universal afgrænser lagrede værdier til dashboardet og browseren. Værdierne deles ikke med andre brugere, browsere eller dashboards. Brug disse cmdlets fra en interaktiv hændelseshandler, så PowerShell Universal kan kommunikere med den tilsluttede browser.

Værdier serialiseres med PowerShell-serializeren, før de gemmes, så De kan gemme og hente PowerShell-objekter og hashtabeller. `Get-UDLocalStorage` returnerer `$null`, når elementet ikke findes.

```powershell
New-UDForm -Content {
    New-UDTextbox -Id 'theme' -Label 'Theme' -Value 'Dark'
    New-UDTextbox -Id 'pageSize' -Label 'Page Size' -Value '25'
} -OnSubmit {
    Set-UDLocalStorage -Name 'preferences' -Value @{
        Theme    = $EventData.theme
        PageSize = [int]$EventData.pageSize
    }

    Show-UDToast -Message 'Preferences saved.'
}

New-UDButton -Text 'Show preferences' -OnClick {
    $preferences = Get-UDLocalStorage -Name 'preferences'

    if ($null -eq $preferences) {
        Show-UDToast -Message 'No preferences have been saved.'
        return
    }

    Show-UDToast -Message "Theme: $($preferences.Theme); page size: $($preferences.PageSize)"
}
```

Browserens lokale lager kan læses og ændres af kode, der kører på siden. Gem ikke adgangskoder, legitimationsoplysninger, API-nøgler, tokens eller andre følsomme data i det. Behandl gemte værdier som brugerstyret input.

#### API

* Set-UDLocalStorage
* Get-UDLocalStorage

## Hændelseshandlere

Mange komponenter understøtter hændelseshandlere i form af scriptblokke. De kan også se dem omtalt som slutpunkter, da det er det, de blev kaldt i Universal Dashboard v2. Disse hændelseshandlere giver Dem mulighed for at køre PowerShell-scripts, når bestemte handlinger finder sted på siden.

De kan f.eks. have et knapklik, der kalder en hændelseshandler. Denne knap viser en toast, når der klikkes. De kan medtage enhver gyldig PowerShell-cmdlet i koden til hændelseshandleren.

```powershell
New-UDButton -Text 'Click Me' -OnClick {
   Show-UDToast 'Hello!'
}
```

### Variabelomfang

Variabler får automatisk scope i hændelseshandlere. De kan få adgang til variabler, som De definerer uden for hændelseshandleren.

```powershell
$MyVariable = "Hello!"
New-UDButton -Text 'Click Me' -OnClick {
   Show-UDToast $MyVariable
}
```

### Hændelsesdata

Nogle hændelseshandlere leverer data som en streng eller som en hashtable. Dette afhænger af den hændelseshandler, De bruger. Hændelseshandleren `New-UDButton` `-OnClick` leverer f.eks. ikke data. `New-UDSelect` `-OnChange` leverer derimod hændelsesdata.

De kan få adgang til hændelsesdataene ved at bruge variablen `$Body` som en streng, nogle gange formateret som JSON, eller ved at bruge variablen `$EventData` som en hashtable.

```powershell
New-UDSelect -Option {
    New-UDSelectOption -Name 'One' -Value 1
    New-UDSelectOption -Name 'Two' -Value 2
    New-UDSelectOption -Name 'Three' -Value 3
} -OnChange { Show-UDToast -Message $EventData }
```

## Formularer

### Indsend en formular

De kan gennemtvinge indsendelse af en formular ved hjælp af cmdletten `Invoke-UDForm`. De kan valgfrit gennemtvinge validering ved at medtage parameteren `-Validate`.

```powershell
New-UDForm -Id 'form' -Content {
   New-UDTextbox -Id 'Text' -Label 'Submit Me'
} -OnSubmit {
   Show-UDToast "Hello!"
}

New-UDButton -Text "Submit Form" -OnClick {
   Invoke-UDForm -Id 'form'
}
```

### Valider en formular

De kan gennemtvinge validering af en formular ved hjælp af `Test-UDForm`.

```powershell
New-UDForm -Id 'form' -Content {
   New-UDTextbox -Id 'Text' -Label 'Submit Me'
} -OnSubmit {
   Show-UDToast "Hello!"
} -OnValidate {
   New-UDValidationResult
}

New-UDButton -Text "Submit Form" -OnClick {
   Test-UDForm -Id 'form'
}
```

## JavaScript

De kan kalde JavaScript fra PowerShell ved hjælp af cmdletten `Invoke-UDJavaScript`.

```powershell
New-UDButton -Text 'Alert Me' -OnClick {
    Invoke-UDJavaScript -JavaScript 'alert("Hello!")'
}
```

#### API

* Invoke-UDJavaScript

## Toast

### Vis en toast

De kan bruge cmdlet'en `Show-UDToast` til at oprette en toastmeddelelse, der vises på slutbrugerens webside. Det sker via en WebSocket og viser toasten med det samme.

```powershell
Show-UDToast -Message 'Hello, World!'
```

### Vis en toast med et ikon

Toastmeddelelser understøtter ikoner som strenge. De kan bruge alle FontAwesome v5-ikoner.

```powershell
Show-UDToast -Icon "Ad" -Message "Test"
```

### Skjul en toast

Skjul en toast baseret på det angivne ID.

```powershell
Show-UDToast -Message 'Hello, World!' -Id 'Toast' -Duration 30000

New-UDButton -Text 'Click' -OnClick {
    Hide-UDToast -Id 'Toast'
}
```

### API

* Show-UDToast
* Hide-UDToast

## Omdirigering

De kan omdirigere brugere til forskellige sider ved hjælp af cmdletten `Invoke-UDRedirect`. Det sker via en WebSocket og omdirigerer, så snart cmdletten kaldes.

```powershell
Invoke-UDRedirect http://www.ironmansoftware.com
```

`Invoke-UDRedirect` omdirigerer automatisk til sider i dashboardet, når der bruges en relativ sti.

```powershell
Invoke-UDRedirect '/page1'
```

Hvis De vil omdirigere til en lokal sti uden for dashboardet, skal De bruge parameteren `-Native`.

```powershell
Invoke-UDRedirect '/publishedFolder/test.txt' -Native
```

#### API

* Invoke-UDRedirect

## Modal

De kan åbne en modal ved hjælp af cmdletten `Show-UDModal`. Den åbnes, så snart De kalder den. De kan medtage hvilke som helst komponenter, De ønsker, i modalen.

Læs mere om modaler her.

## Håndtering af komponenttilstand

De kan administrere komponenttilstand dynamisk ved hjælp af UDElement-kommandoerne.

### Hentning af komponenttilstand

De kan modtage tilstanden for et element ved hjælp af `Get-UDElement`. Tilstanden returneres som en hashtable. Dette er primært nyttigt for inputkomponenter.

```powershell
$Value = (Get-UDElement -Id 'txtExample').value
```

### Angivelse af komponenttilstand

Alternativt kan De angive komponenttilstand ved hjælp af `Set-UDElement`. De skal angive et id og en hashtable med egenskaber, der skal angives på komponenten. Alle indbyggede komponenter understøtter `Set-UDElement`.

```powershell
New-UDTextbox -Id 'textbox'

New-UDButton -Text 'Click' -OnClick {
    Set-UDElement -Id 'textbox' -Properties @{
        Value = 'My Value'
    }
}
```

### Fjernelse af en komponent

De kan fjerne komponenter fra siden ved hjælp af `Remove-UDElement`. Komponenten vises ikke længere på siden.

```powershell
Remove-UDElement -Id 'txtExample'
```

### Tilføjelse af en komponent

Tilføj en underordnet komponent til en eksisterende overordnet komponent.

```powershell
New-UDElement -Id 'myDiv' -Tag div

New-UDButton -Text 'Click' -OnClick {
    Add-UDElement -ParentId 'myDiv' -Content {
        New-UDTypography -Text 'Hi'
    }
}
```

### Ryd en komponent

De kan fjerne alle underordnede komponenter fra en eksisterende komponent ved hjælp af `Clear-UDElement`.

```powershell
New-UDElement -Id 'myDiv' -Tag div

New-UDButton -Text 'Click' -OnClick {
    Add-UDElement -ParentId 'myDiv' -Content {
        New-UDTypography -Text 'Hi'
    }
    Add-UDElement -ParentId 'myDiv' -Content {
        New-UDTypography -Text 'Hi'
    }
    Add-UDElement -ParentId 'myDiv' -Content {
        New-UDTypography -Text 'Hi'
    }
}

New-UDButton -Text 'Clear' -OnClick {
    Clear-UDElement -Id 'myDiv'
}
```

### Genindlæsning af en komponent

Nogle komponenter understøtter genindlæsning. De kan udløse en genindlæsning af en komponent ved hjælp af `Sync-UDElement`.

```powershell
New-UDDynamic -Id 'reloadMe' -Content {
    Get-Date
}

New-UDButton -Text 'Click' -OnClick {
    Sync-UDElement -Id 'reloadMe'
}
```

### Vælg en komponent

De kan vælge en komponent med `Select-UDElement`.

```powershell
New-UDElement -Id 'txt' -Tag input -Properties @{ type = text }

New-UDButton -Text 'Select' -OnClick {
    Select-UDElement -Id 'txt' -ScrollToElement
}
```

## PowerShell-værtsintegration

Dashboards integrerer direkte med PowerShell-værten for at levere funktioner baseret på standard-cmdlets.

### Read-Host

Brug af cmdletten `Read-Host` får en dialogboks til at blive vist på brugerens dashboard. Den indtastede tekst returneres af cmdletten.

```powershell
$Text = Read-Host 'Enter Some Text'
Show-UDToast $Text
```

<figure><img src="https://218893503-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAje1UFQFSPx2kH2ueeCf%2Fuploads%2Fgit-blob-2f1aac4bc4868fce328541dd1f6c46e04ca4fe52%2Fimage%20(185).png?alt=media" alt=""><figcaption></figcaption></figure>

### Get-Credential

Brug af `Get-Credential` får en dialogboks til at blive vist, som accepterer et brugernavn og en adgangskode. Et `PSCredential`-objekt returneres fra cmdletten.

```powershell
Get-Credential -UserName "adam"
```

<figure><img src="https://218893503-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAje1UFQFSPx2kH2ueeCf%2Fuploads%2Fgit-blob-0e3046c1a3b2c0df6d6071864593d095b836dc5f%2Fimage%20(195).png?alt=media" alt=""><figcaption></figcaption></figure>

### Write-Progress

Cmdletter, der bruger statusstrømmen eller `Write-Progress`, resulterer i en statusdialogboks. Pop op-vinduet viser aktiviteten, procent fuldført og den aktuelle handling.

```powershell
1..100 | ForEach-Object {
    Write-Progress -PercentComplete $_ -Activity 'Processing...' -CurrentOperation "User $_"
    Start-Sleep -Milliseconds 500
}
```

<figure><img src="https://218893503-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAje1UFQFSPx2kH2ueeCf%2Fuploads%2Fgit-blob-8eb45834c2ba1e09ca6fc862d0460864b1893bf9%2Fimage%20(326).png?alt=media" alt=""><figcaption></figcaption></figure>

De kan deaktivere Write-Progress-integrationen ved at angive `$ProgressPreference` til `SilentlyContinue`.

```powershell
$ProgressPreference = 'SilentlyContinue'
```

### Spørg om valg

De kan bruge funktionen `$Host.UI.PromptForChoice` til at vise en flervalgsdialog.

```powershell
$Title = "Welcome"
$Info = "Just to Demo Prompt for Choice"

$options = [System.Management.Automation.Host.ChoiceDescription[]] @("Power", "Shell", "Quit")
[int]$defaultchoice = 2
$opt = $host.UI.PromptForChoice($Title, $Info, $Options, $defaultchoice)
switch ($opt) {
    0 { Show-UDToast "Power" }
    1 { Show-UDToast "Shell" }
    2 { Show-UDToast "Good Bye!!!" }
}
```

<figure><img src="https://218893503-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAje1UFQFSPx2kH2ueeCf%2Fuploads%2Fgit-blob-b871b9667ae2a64f335b7605f745f308c9249a12%2Fimage%20(335).png?alt=media" alt=""><figcaption></figcaption></figure>

### Write-Host

`Write-Host` i apps skriver til fanen **Log** i Admin Console for appen. For at modtage disse logmeddelelser i konsollen i Deres browsers udviklerværktøjer skal De aktivere konsollogning i `appsettings.json`.

```json
{
    "UniversalDashboard": {
        "ConsoleLog": true
    }
}
```

## API

* Get-UDElement
* Set-UDElement
* Clear-UDElement
* Remove-UDElement
* Sync-UDElement
* Select-UDElement

#### Se også

* [Devolutions Academy – Oprettelse af Deres første program](https://academy.devolutions.net/student/page/3466027-creating-your-first-application?curriculum_activity_id=5771070\&path_id=3549598\&sid=ef268aed-28f2-437f-8576-03e7ab055007\&sid_i=0)


---

# 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/apps/interaction.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.
