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

# Portées personnalisées

Utilisez les portées cache, page, session et UI dans les applis PowerShell Universal pour partager l'état ou interagir avec les éléments du navigateur connecté.

Les Universal Apps exposent des fournisseurs PowerShell personnalisés pour l'état dont la portée est limitée à une appli, une session de navigateur, une page ou un élément d'interface connecté. Utilisez la portée qui correspond à la durée de vie et à la visibilité requises par votre appli.

## Portée UI

La portée `$UI:` donne un accès direct à un élément du navigateur connecté par son ID. Lisez ou définissez ses propriétés d'état à l'aide de la syntaxe de propriété PowerShell plutôt qu'avec `Get-UDElement` ou `Set-UDElement`.

Utilisez `$UI:` uniquement dans un terminal d'appli ou un gestionnaire interactif ayant une connexion active au navigateur. Il ne peut pas accéder aux éléments à partir d'API REST, de terminaux planifiés ou de travaux en arrière-plan sans client d'appli connecté.

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

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

Définissez une ou plusieurs propriétés d'un élément en assignant directement une propriété.

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

L'ID de l'élément suit `$UI:` et le nom de la propriété correspond à la propriété d'état du composant. Par exemple, les zones de texte exposent `value`, tandis qu'un composant de typographie expose `Text`. Utilisez les propriétés d'état prises en charge par le composant que vous utilisez.

L'assignation directe suivante équivaut à appeler `Set-UDElement` avec une table de hachage de propriétés :

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

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

## Portée cache

La portée cache stocke une variable qui est accessible à tous les terminaux de l'appli. Utilisez-la pour les données partagées par plusieurs contrôles ou coûteuses à récupérer, comme les données Active Directory ou les compteurs de performance.

Comme pour les autres portées PowerShell, définissez une variable de cache avec un préfixe et un séparateur deux-points.

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

Une fois assignée, la variable `$Cache:Computers` est accessible dans tout terminal d'appli.

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

## Portée page

La portée page stocke des variables pour un seul onglet ou une seule fenêtre de navigateur. L'état est supprimé lorsque cet onglet ou cette fenêtre se ferme; ouvrir l'appli dans un autre onglet démarre une portée page distincte.

```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 stocke les variables pour la session d'appli d'un seul utilisateur. Une session commence lorsque l'utilisateur visite l'appli pour la première fois et est identifiée par un témoin de navigateur. Les sessions ont un délai d'inactivité de 25 minutes.

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

Une fois assignée, `$Session:ShowChart` est accessible dans les gestionnaires d'événements de l'appli. Les variables de session ne sont pas accessibles dans les terminaux d'API REST ni dans les terminaux planifiés.

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

Les variables de session sont effacées lorsque la session se termine.

### Stockage des identifiants dans la portée session

La portée session est utile pour les identifiants qui ne doivent exister que pendant la durée d'une session utilisateur active. Cela permet à une appli de demander des identifiants administratifs sans les conserver ni les partager.

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

Les identifiants dans `$Session:AdminCredentials` ne sont pas conservés sur le disque ni partagés avec d'autres utilisateurs, et ils sont effacés à la fin de la session.

## Voir aussi

* [Devolutions Academy - User status/refresh user details](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/fr/applis/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.
