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

## Benutzerdefinierte Variablenbereiche

Universal Apps stellen drei benutzerdefinierte Variablenbereiche über benutzerdefinierte Provider bereit. Diese Provider ermöglichen es Ihnen, Ihre Variablen in Bereichen zu speichern, die für eine Webanwendung sinnvoll sind. Der Cache-Bereich wird verwendet, um Variablen zu speichern, die innerhalb jedes Endpunkts einer App verwendet werden können. Der Sitzungsbereich wird verwendet, um Variablen zu speichern, die für die Sitzung eines einzelnen Benutzers in der App verwendet werden können.

### Cache-Bereich

Der Cache-Bereich wird verwendet, um eine Variable zu speichern, die in jedem Endpunkt verfügbar ist. Der Cache-Bereich ist nützlich, um Daten zu speichern, die in mehr als einem Steuerelement angezeigt werden oder deren Abruf zeitaufwändig sein kann. Dies kann beim Abfragen von Computer-Leistungsindikatoren hilfreich sein (z. B. Active Directory, Azure).

Wie bei jedem anderen Bereich werden Cache-Variablen mit einem Präfix und einem Doppelpunkt als Trennzeichen definiert.

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

Nach der Zuweisung ist die Variable `$Cache:Computer` innerhalb jedes Endpunkts verfügbar.

```powershell
New-UDMonitor -Title Computers -Endpoint {
    $Cache:Computers.Length | Out-UDMonitorData
}
```

### Seitenbereich

Der Seitenbereich speichert Variablen pro Browser-Tab oder -Fenster. Wenn ein neuer Tab geöffnet oder der aktuelle geschlossen wird, wird der Zustand entfernt.

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

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

### Sitzungsbereich

Der Sitzungsbereich wird verwendet, um eine Variable pro Sitzung zu speichern. Eine Sitzung wird eingerichtet, wenn der Browser eines Benutzers erstmals ein Dashboard besucht. Im Browser des Benutzers wird ein Cookie gespeichert, das festlegt, dass er Teil der Sitzung ist. Sitzungen haben ein Leerlauf-Timeout von 25 Minuten.

Wie bei jedem anderen Bereich werden Cache-Variablen mit einem Präfix und einem Doppelpunkt als Trennzeichen definiert.

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

Nach der Zuweisung ist die Variable `$Session:ShowChart` in App-Event-Handlern verfügbar. Sitzungsvariablen sind in REST-API-Endpunkten oder geplanten Endpunkten nicht verfügbar.

```powershell
New-UDColumn -Endpoint {
    if ($Session:ShowChart) {
         New-UDChart ...
    }
}
```

Sobald eine Sitzung beendet wird, werden die Sitzungsvariablen gelöscht.

#### Speichern von Anmeldeinformationen im Sitzungsbereich

Der Sitzungsbereich ist besonders nützlich, um Benutzeranmeldeinformationen zu speichern, die nicht über die Sitzung des Benutzers hinaus bestehen bleiben sollen. Dieses Muster ermöglicht Apps, administrative Anmeldeinformationen abzufragen, ohne sie dauerhaft zu speichern, und erfüllt damit Sicherheitsanforderungen, bei denen Anmeldeinformationen nicht gespeichert werden dürfen.

> ℹ️ **Information**
>
> Sitzungsvariablen verfallen, wenn die Sitzung des Benutzers endet. Dadurch sind sie ideal zum Speichern sensibler Daten wie Anmeldeinformationen, die nur während der aktiven Nutzung existieren sollen.

**Beispiel: Abfragen von Administrator-Anmeldeinformationen**

Dieses Beispiel zeigt, wie Benutzer einmal pro Sitzung nach Anmeldeinformationen gefragt werden und diese für privilegierte Vorgänge wiederverwendet werden:

```powershell
# Check if credentials are already stored in the session
if (-not $Session:AdminCredentials) {
    # Prompt user for credentials (only happens once per session)
    $Session:AdminCredentials = Get-Credential -Message "Enter administrator credentials"
}

# Use the stored credentials for privileged operations
New-UDButton -Text 'Check ACL' -OnClick {
    try {
        # Execute command as the credentialed user
        $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'
```

**Wichtige Punkte:**

* `$Session:AdminCredentials` speichert Anmeldeinformationen nur für die Dauer der Sitzung des Benutzers
* `Get-Credential` fragt den Benutzer einmal ab; nachfolgende Vorgänge verwenden die gespeicherten Anmeldeinformationen erneut
* `Invoke-Command -Credential` führt Befehle als der Benutzer mit den Anmeldeinformationen aus
* Anmeldeinformationen werden niemals auf der Festplatte gespeichert oder zwischen Benutzern geteilt
* Wenn die Sitzung des Benutzers endet, werden die Anmeldeinformationen automatisch gelöscht

Dieser Ansatz ist ideal für Anwendungen, die ACL-Verwaltung, Dateisystemvorgänge oder andere Aufgaben ausführen, die erhöhte Rechte erfordern, ohne Administrator-Anmeldeinformationen dauerhaft zu speichern.


---

# 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.
