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

# Portées de variables personnalisées

## Portées de variables personnalisées

Les applications Universal exposent trois portées de variables personnalisées à l'aide de fournisseurs personnalisés. Ces fournisseurs vous permettent de stocker vos variables dans des portées adaptées à une application web. La portée cache est utilisée pour stocker des variables accessibles dans n'importe quel point de terminaison d'une application. La portée session est utilisée pour stocker des variables disponibles durant la session d'un seul utilisateur dans l'application.

### Portée cache

La portée cache permet de stocker une variable disponible dans n'importe quel point de terminaison. Elle est utile pour stocker des données pouvant être affichées dans plusieurs contrôles ou dont la récupération peut prendre du temps. Cela peut être utile pour interroger des compteurs de performances de machines (par exemple, Active Directory, Azure).

Comme toute autre portée, les variables cache sont définies avec un préfixe et un séparateur deux-points.

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

Une fois assignée, la variable `$Cache:Computer` est disponible dans n'importe quel point de terminaison.

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

### Portée page

La portée page stocke les variables par onglet ou fenêtre du navigateur. Si un nouvel onglet est ouvert ou si l'onglet actuel est fermé, l'état sera supprimé.

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

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

### Portée session

La portée session est utilisée pour stocker une variable par session. Une session est établie lorsque le navigateur d'un utilisateur accède pour la première fois à un tableau de bord. Un cookie est stocké dans le navigateur de l'utilisateur pour indiquer qu'il fait partie de la session. Les sessions ont un délai d'inactivité de 25 minutes.

Comme toute autre portée, les variables cache sont définies avec un préfixe et un séparateur deux-points.

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

Une fois assignée, la variable `$Session:ShowChart` est disponible dans les gestionnaires d'événements de l'application. Les variables de session ne sont pas disponibles dans les points de terminaison REST API ni dans les points de terminaison planifiés.

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

Une fois la session terminée, les variables de session sont effacées.

#### Stockage des informations d'identification dans la portée session

La portée session est particulièrement utile pour stocker les informations d'identification des utilisateurs qui ne doivent pas être conservées au-delà de leur session. Ce modèle permet aux applications de demander des informations d'identification d'administrateur sans les stocker de façon permanente, répondant ainsi aux exigences de sécurité selon lesquelles les informations d'identification ne doivent pas être enregistrées.

> ℹ️ **Information**
>
> Les variables de session expirent à la fin de la session de l'utilisateur. Elles sont donc idéales pour stocker des données sensibles telles que des informations d'identification qui ne doivent exister que durant une utilisation active.

**Exemple : demande d'informations d'identification d'administrateur**

Cet exemple montre comment inviter les utilisateurs à fournir leurs informations d'identification une fois par session et les réutiliser pour des opérations privilégiées :

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

**Points clés :**

* `$Session:AdminCredentials` stocke les informations d'identification pour la durée de la session de l'utilisateur uniquement
* `Get-Credential` invite l'utilisateur une seule fois ; les opérations suivantes réutilisent les informations d'identification stockées
* `Invoke-Command -Credential` exécute les commandes en tant qu'utilisateur authentifié
* Les informations d'identification ne sont jamais enregistrées sur le disque ni partagées entre les utilisateurs
* Lorsque la session de l'utilisateur se termine, les informations d'identification sont automatiquement effacées

Cette approche est idéale pour les applications qui effectuent la gestion des ACL, des opérations sur le système de fichiers ou d'autres tâches nécessitant des privilèges élevés sans stocker les informations d'identification d'administrateur de façon permanente.


---

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

```
GET https://docs.devolutions.net/powershell-universal/fr/apps/custom-variable-scopes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
