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

# Ambiti di variabile personalizzati

## Ambiti di variabile personalizzati

Le Universal Apps espongono tre ambiti di variabile personalizzati tramite provider personalizzati. Questi provider le permettono di archiviare le variabili in ambiti che hanno senso per un'applicazione web. L'ambito cache viene utilizzato per archiviare variabili che possono essere usate all'interno di qualsiasi endpoint di un'app. L'ambito session viene utilizzato per archiviare variabili che possono essere usate per la sessione di un singolo utente dell'app.

### Ambito cache

L'ambito cache viene utilizzato per archiviare una variabile che sarà disponibile in qualsiasi endpoint. L'ambito cache è utile per archiviare dati che possono essere mostrati in più di un controllo o la cui ricerca può richiedere molto tempo. Questo può essere utile per interrogare i contatori delle prestazioni delle macchine (ad es. Active Directory, Azure).

Come per qualsiasi altro ambito, le variabili cache vengono definite con un prefisso e un separatore due punti.

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

Una volta assegnata, la variabile `$Cache:Computer` è disponibile in qualsiasi endpoint.

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

### Ambito page

L'ambito page archivia le variabili per singola scheda o finestra del browser. Se viene aperta una nuova scheda o quella corrente viene chiusa, lo stato verrà rimosso.

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

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

### Ambito session

L'ambito session viene utilizzato per archiviare una variabile per sessione. Una sessione viene stabilita quando il browser di un utente visita per la prima volta una dashboard. Nel browser dell'utente viene archiviato un cookie che indica che fa parte della sessione. Le sessioni hanno un timeout di inattività di 25 minuti.

Come per qualsiasi altro ambito, le variabili cache vengono definite con un prefisso e un separatore due punti.

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

Una volta assegnata, la variabile `$Session:ShowChart` è disponibile negli handler degli eventi dell'app. Le variabili di sessione non sono disponibili negli endpoint REST API o negli endpoint pianificati.

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

Una volta terminata una sessione, le variabili di sessione vengono cancellate.

#### Archiviazione delle credenziali nell'ambito session

L'ambito session è particolarmente utile per archiviare le credenziali utente che non devono essere conservate oltre la sessione dell'utente. Questo modello consente alle app di richiedere le credenziali amministrative senza archiviarle in modo permanente, rispondendo ai requisiti di sicurezza secondo cui le credenziali non devono essere salvate.

> ℹ️ **Informazione**
>
> Le variabili di sessione scadono quando termina la sessione dell'utente. Questo le rende ideali per archiviare dati sensibili come le credenziali che devono esistere solo durante l'uso attivo.

**Esempio: richiesta delle credenziali di amministratore**

Questo esempio mostra come richiedere agli utenti le credenziali una volta per sessione e riutilizzarle per operazioni privilegiate:

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

**Punti chiave:**

* `$Session:AdminCredentials` archivia le credenziali solo per la durata della sessione dell'utente
* `Get-Credential` richiede le credenziali all'utente una sola volta; le operazioni successive riutilizzano la credenziale archiviata
* `Invoke-Command -Credential` esegue i comandi come l'utente delle credenziali
* Le credenziali non vengono mai conservate su disco né condivise tra gli utenti
* Quando la sessione dell'utente termina, le credenziali vengono cancellate automaticamente

Questo approccio è ideale per le applicazioni che eseguono la gestione delle ACL, operazioni sul file system o altre attività che richiedono privilegi elevati senza archiviare in modo permanente le credenziali di amministratore.


---

# 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/it/app/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.
