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

# Interaktion

Erstellen Sie interaktive PowerShell Universal-Apps mit lokalem Browser-Speicher, Zwischenablage, Downloads, Toast, Modal, JavaScript-Cmdlets und PowerShell-Host- Funktionen.

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

Universal Apps ermöglicht die Erstellung interaktiver Websites mit PowerShell. Mehrere Cmdlets geben dem Benutzer Feedback, aktualisieren Komponenten, lesen den Komponentenstatus und speichern browserlokale Einstellungen dauerhaft.

## Zwischenablage

Mit `Set-UDClipboard` können Sie Zeichenfolgendaten in die Zwischenablage des Benutzers schreiben.

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

#### API

* Set-UDClipboard

## Downloads

Sie können einen Download im Browser des Benutzers mit `Start-UDDownload` starten. Aufgrund der Browsersicherheit muss der Benutzer eine Aktion ausführen, z. B. auf eine Schaltfläche klicken, um den Download zuzulassen. `Start-UDDownload` ist nicht für das Herunterladen großer Dateien geeignet.

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

## Lokaler Speicher

Verwenden Sie `Set-UDLocalStorage` und `Get-UDLocalStorage`, um die App-Einstellungen eines Benutzers im lokalen Speicher des Browsers dauerhaft zu speichern. Die Werte bleiben nach einem Neuladen der Seite verfügbar und wenn der Benutzer dieselbe App später im selben Browserprofil öffnet.

PowerShell Universal beschränkt gespeicherte Werte auf das Dashboard und den Browser. Sie werden nicht mit anderen Benutzern, Browsern oder Dashboards geteilt. Verwenden Sie diese Cmdlets aus einem interaktiven Event-Handler, damit PowerShell Universal mit dem verbundenen Browser kommunizieren kann.

Werte werden vor dem Speichern mit dem PowerShell-Serialisierer serialisiert, sodass Sie PowerShell-Objekte und Hashtables speichern und abrufen können. `Get-UDLocalStorage` gibt `$null` zurück, wenn das Element nicht existiert.

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

Der lokale Speicher des Browsers kann von Code, der auf der Seite ausgeführt wird, gelesen und geändert werden. Speichern Sie darin keine Passwörter, Anmeldeinformationen, API-Schlüssel, Tokens oder andere sensible Daten. Behandeln Sie gespeicherte Werte als benutzergesteuerte Eingabe.

#### API

* Set-UDLocalStorage
* Get-UDLocalStorage

## Event-Handler

Viele Komponenten unterstützen Event-Handler in Form von Skriptblöcken. Möglicherweise werden diese auch als Endpunkte bezeichnet, da sie in Universal Dashboard v2 so genannt wurden. Diese Event-Handler ermöglichen es Ihnen, PowerShell-Skripte aufzurufen, wenn bestimmte Aktionen auf der Seite stattfinden.

Beispielsweise könnten Sie einen Schaltflächenklick haben, der einen Event-Handler aufruft. Diese Schaltfläche zeigt beim Klicken einen Toast an. Sie können jedes gültige PowerShell-Cmdlet im Code des Event-Handlers einbinden.

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

### Variablenbereich

Variablen werden automatisch in den Gültigkeitsbereich von Event-Handlern übernommen. Sie können auf Variablen zugreifen, die Sie außerhalb des Event-Handlers definieren.

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

### Event-Daten

Einige Event-Handler stellen Daten als Zeichenfolge oder als Hashtable bereit. Dies hängt von dem verwendeten Event-Handler ab. Beispielsweise stellt der `-OnClick`-Event-Handler von `New-UDButton` keine Daten bereit. Andererseits stellt `-OnChange` von `New-UDSelect` Event-Daten bereit.

Sie können auf die Event-Daten zugreifen, indem Sie die Variable `$Body` als Zeichenfolge verwenden, die manchmal als JSON formatiert ist, oder indem Sie die Variable `$EventData` als Hashtable verwenden.

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

## Formulare

### Ein Formular absenden

Sie können ein Formular mit dem Cmdlet `Invoke-UDForm` zum Absenden zwingen. Optional können Sie die Validierung erzwingen, indem Sie den Parameter `-Validate` angeben.

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

### Ein Formular validieren

Sie können eine Formularvalidierung mit `Test-UDForm` erzwingen.

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

Sie können JavaScript aus PowerShell mit dem Cmdlet `Invoke-UDJavaScript` aufrufen.

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

#### API

* Invoke-UDJavaScript

## Toast

### Einen Toast anzeigen

Sie können das Cmdlet `Show-UDToast` verwenden, um eine Toast-Nachricht zu erstellen, die auf der Webseite des Endbenutzers erscheint. Dies erfolgt über einen WebSocket und zeigt den Toast sofort an.

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

### Einen Toast mit einem Symbol anzeigen

Toasts unterstützen Symbole als Zeichenfolgen. Sie können alle FontAwesome v5-Symbole verwenden.

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

### Einen Toast ausblenden

Blenden Sie einen Toast anhand der angegebenen ID aus.

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

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

### API

* Show-UDToast
* Hide-UDToast

## Weiterleitung

Sie können Benutzer mit dem Cmdlet `Invoke-UDRedirect` auf andere Seiten weiterleiten. Dies erfolgt über einen WebSocket und leitet weiter, sobald das Cmdlet aufgerufen wird.

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

`Invoke-UDRedirect` leitet automatisch zu Seiten im Dashboard weiter, wenn ein relativer Pfad verwendet wird.

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

Wenn Sie zu einem lokalen Pfad außerhalb des Dashboards weiterleiten möchten, verwenden Sie den Parameter `-Native`.

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

#### API

* Invoke-UDRedirect

## Modal

Sie können ein Modal mit dem Cmdlet `Show-UDModal` öffnen. Es wird geöffnet, sobald Sie es aufrufen. Sie können beliebige Komponenten im Modal einbinden.

Lesen Sie hier mehr über Modals.

## Verwalten des Komponentenstatus

Sie können den Komponentenstatus dynamisch mit den UDElement-Befehlen verwalten.

### Abrufen des Komponentenstatus

Sie können den Status eines Elements mit `Get-UDElement` abrufen. Der Status wird als Hashtable zurückgegeben. Dies ist vor allem für Eingabekomponenten nützlich.

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

### Festlegen des Komponentenstatus

Alternativ können Sie den Komponentenstatus mit `Set-UDElement` festlegen. Sie müssen eine ID und eine Hashtable mit Eigenschaften angeben, die für die Komponente festgelegt werden sollen. Alle integrierten Komponenten unterstützen `Set-UDElement`.

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

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

### Entfernen einer Komponente

Sie können Komponenten mit `Remove-UDElement` von der Seite entfernen. Die Komponente erscheint dann nicht mehr auf der Seite.

```powershell
Remove-UDComponent -Id 'txtExample'
```

### Hinzufügen einer Komponente

Fügen Sie einer bestehenden übergeordneten Komponente eine untergeordnete Komponente hinzu.

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

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

### Eine Komponente leeren

Sie können alle untergeordneten Komponenten einer bestehenden Komponente mit `Clear-UDElement` entfernen.

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

### Neuladen einer Komponente

Einige Komponenten unterstützen das Neuladen. Sie können ein Neuladen einer Komponente mit `Sync-UDElement` auslösen.

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

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

### Eine Komponente auswählen

Sie können eine Komponente mit `Select-UDElement` auswählen.

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

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

## PowerShell-Host-Integration

Dashboards integrieren sich direkt in den PowerShell-Host, um Funktionen auf Basis von Standard-Cmdlets bereitzustellen.

### Read-Host

Die Verwendung des Cmdlets `Read-Host` führt dazu, dass im Dashboard des Benutzers ein Dialog angezeigt wird. Der eingegebene Text wird vom Cmdlet zurückgegeben.

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

Die Verwendung von `Get-Credential` führt dazu, dass ein Dialog angezeigt wird, der einen Benutzernamen und ein Passwort akzeptiert. Das Cmdlet gibt ein `PSCredential`-Objekt zurück.

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

Cmdlets, die den Fortschrittsstream oder `Write-Progress` verwenden, führen zu einem Fortschrittsdialog. Das Popup zeigt die Aktivität, den Prozentsatz der Fertigstellung und den aktuellen Vorgang an.

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

Sie können die Write-Progress-Integration deaktivieren, indem Sie `$ProgressPreference` auf `SilentlyContinue` setzen.

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

### Auswahlaufforderung

Sie können die Funktion `$Host.UI.PromptForChoice` verwenden, um einen Mehrfachauswahl-Dialog anzuzeigen.

```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` in Apps schreibt in die Registerkarte **Log** in der Admin-Konsole für die App. Um diese Protokollmeldungen in der Entwicklertools-Konsole Ihres Browsers zu erhalten, aktivieren Sie die Konsolenprotokollierung in `appsettings.json`.

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

## API

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


---

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