> 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/custom-variable-scopes.md).

# Benutzerdefinierte Bereiche

Verwenden Sie Cache-, Page-, Session- und UI-Scopes in PowerShell Universal-Apps, um Zustände zu teilen oder mit verbundenen Browser-Elementen zu interagieren.

Universal Apps stellen benutzerdefinierte PowerShell-Provider für Zustände bereit, die auf eine App, eine Browsersitzung, eine Seite oder ein verbundenes UI-Element begrenzt sind. Verwenden Sie den Scope, der der von Ihrer App benötigten Lebensdauer und Sichtbarkeit entspricht.

## UI-Scope

Der `$UI:`-Scope bietet direkten Zugriff auf ein Element im verbundenen Browser anhand seiner ID. Lesen oder setzen Sie dessen Zustandseigenschaften mit der PowerShell-Eigenschaftssyntax anstelle von `Get-UDElement` oder `Set-UDElement`.

Verwenden Sie `$UI:` nur in einem App-Endpunkt oder interaktiven Handler mit einer aktiven Browserverbindung. Ohne verbundenen App-Client kann nicht über REST-APIs, geplante Endpunkte oder Hintergrundarbeit auf Elemente zugegriffen werden.

```powershell
New-UDTextbox -Id 'Name'

New-UDButton -Text 'Show name' -OnClick {
    Show-UDToast -Message $UI:Name.value
}
```

Setzen Sie eine oder mehrere Eigenschaften eines Elements, indem Sie einer Eigenschaft direkt einen Wert zuweisen.

```powershell
$UI:Status.Text = 'Saved'
$UI:Status.Visible = $true
$UI:Status.Color = 'green'
```

Die Element-ID folgt auf `$UI:` und der Eigenschaftsname entspricht der Zustandseigenschaft der Komponente. Beispielsweise stellen Textfelder `value` bereit, während eine Typography-Komponente `Text` bereitstellt. Verwenden Sie die Zustandseigenschaften, die von der jeweils verwendeten Komponente unterstützt werden.

Die folgende direkte Zuweisung entspricht dem Aufruf von `Set-UDElement` mit einer Eigenschaften-Hashtable:

```powershell
$UI:Status.Text = 'Saved'

# Equivalent to:
Set-UDElement -Id 'Status' -Properties @{ Text = 'Saved' }
```

## Cache-Scope

Der Cache-Scope speichert eine Variable, die jedem Endpunkt in der App zur Verfügung steht. Verwenden Sie ihn für Daten, die von mehreren Steuerelementen gemeinsam genutzt werden oder deren Abruf aufwendig ist, etwa Active Directory-Daten oder Leistungsindikatoren.

Wie bei anderen PowerShell-Scopes definieren Sie eine Cache-Variable mit einem Präfix und einem Doppelpunkt als Trennzeichen.

```powershell
$Cache:Computers = Get-ADComputer
```

Nach der Zuweisung steht die Variable `$Cache:Computers` in jedem App-Endpunkt zur Verfügung.

```powershell
New-UDGauge -Value $Cache:Computers.Length -ValueMinimum 0 -ValueMaximum 100
```

## Page-Scope

Der Page-Scope speichert Variablen für eine Browser-Registerkarte oder ein Browserfenster. Der Zustand wird entfernt, wenn diese Registerkarte oder dieses Fenster geschlossen wird; das Öffnen der App in einer anderen Registerkarte startet einen separaten Page-Scope.

```powershell
New-UDForm -Content {
    New-UDTextbox -Id 'Name'
} -OnSubmit {
    $Page:Name = $EventData.Name
    Sync-UDElement -Id 'Name'
}

New-UDDynamic -Content {
    New-UDTypography $Page:Name
}
```

## Session-Scope

Der Session-Bereich speichert Variablen für die App-Sitzung eines Benutzers. Eine Sitzung beginnt, wenn der Benutzer die App zum ersten Mal aufruft, und wird durch ein Browser-Cookie identifiziert. Sitzungen haben ein Leerlauf-Timeout von 25 Minuten.

```powershell
New-UDCheckbox -Label 'Show chart' -OnChange {
    $Session:ShowChart = $EventData
}
```

Nach der Zuweisung steht `$Session:ShowChart` in App-Event-Handlern zur Verfügung. Session-Variablen sind in REST-API-Endpunkten oder geplanten Endpunkten nicht verfügbar.

```powershell
New-UDGrid -Content {
    if ($Session:ShowChart) {
        $Data = @(
            [PSCustomObject]@{ Name = 'Available'; Value = 75 }
            [PSCustomObject]@{ Name = 'Used'; Value = 25 }
        )

        New-UDChartJS -Type 'doughnut' -Data $Data -DataProperty Value -LabelProperty Name
    }
}
```

Session-Variablen werden gelöscht, wenn die Sitzung beendet wird.

### Speichern von Anmeldeinformationen im Session-Scope

Der Session-Scope ist nützlich für Anmeldeinformationen, die nur für die Dauer einer aktiven Benutzersitzung vorhanden sein sollen. Dadurch kann eine App administrative Anmeldeinformationen abfragen, ohne sie dauerhaft zu speichern oder weiterzugeben.

```powershell
if (-not $Session:AdminCredentials) {
    $Session:AdminCredentials = Get-Credential -Message 'Enter administrator credentials'
}

New-UDButton -Text 'Check ACL' -OnClick {
    try {
        $result = Invoke-Command -Credential $Session:AdminCredentials -ScriptBlock {
            Get-Acl C:\SensitiveFolder
        }

        Show-UDToast -Message 'ACL retrieved successfully' -BackgroundColor Green
        Set-UDElement -Id 'aclOutput' -Content {
            $result | Out-String
        }
    }
    catch {
        Show-UDToast -Message "Failed: $($_.Exception.Message)" -BackgroundColor Red
    }
}

New-UDElement -Tag 'pre' -Id 'aclOutput'
```

Anmeldeinformationen in `$Session:AdminCredentials` werden nicht auf der Festplatte gespeichert oder mit anderen Benutzern geteilt und werden gelöscht, wenn die Sitzung endet.

## Siehe auch

* [Devolutions Academy - Benutzerstatus/Benutzerdetails aktualisieren](https://academy.devolutions.net/student/activity/3546046-part-5-user-status-refresh-user-details)


---

# 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/custom-variable-scopes.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.
