> 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/interaction.md).

# Interazione

Crei app interattive di PowerShell Universal usando l'archiviazione locale del browser, gli appunti, i download, i toast, le finestre modali, i cmdlet JavaScript e le funzionalità dell'host PowerShell

```powershell
Invoke-UDRedirect https://devolutions.net/powershell-universal/
```

Universal Apps consente di creare siti web interattivi con PowerShell. Diversi cmdlet forniscono feedback all'utente, aggiornano i componenti, leggono lo stato dei componenti e mantengono le preferenze locali del browser.

## Appunti

Può inserire dati di tipo stringa negli appunti dell'utente con `Set-UDClipboard`.

```powershell
New-UDButton -Text 'Clipboard' -OnClick {
    Set-UDClipboard -Data 'Hello, there!'
}
```

#### API

* Set-UDClipboard

## Download

Può avviare un download nel browser dell'utente usando `Start-UDDownload`. Per motivi di sicurezza del browser, l'utente deve compiere un'azione, ad esempio fare clic su un pulsante, per consentire il download. `Start-UDDownload` non è adatto al download di file di grandi dimensioni.

```powershell
New-UDButton -Text 'Download' -OnClick {
    Start-UDDownload -StringData 'Hello, World!'
}
```

## Archiviazione locale

Usi `Set-UDLocalStorage` e `Get-UDLocalStorage` per mantenere le preferenze dell'app di un utente nell'archiviazione locale del browser. I valori rimangono disponibili dopo il ricaricamento della pagina e quando l'utente apre successivamente la stessa app nello stesso profilo del browser.

PowerShell Universal limita l'ambito dei valori memorizzati alla dashboard e al browser. Non vengono condivisi con altri utenti, browser o dashboard. Usi questi cmdlet da un gestore di eventi interattivo affinché PowerShell Universal possa comunicare con il browser connesso.

I valori vengono serializzati con il serializzatore di PowerShell prima di essere memorizzati, quindi può salvare e recuperare oggetti PowerShell e hashtable. `Get-UDLocalStorage` restituisce `$null` quando l'elemento non esiste.

```powershell
New-UDForm -Content {
    New-UDTextbox -Id 'theme' -Label 'Theme' -Value 'Dark'
    New-UDTextbox -Id 'pageSize' -Label 'Page Size' -Value '25'
} -OnSubmit {
    Set-UDLocalStorage -Name 'preferences' -Value @{
        Theme    = $EventData.theme
        PageSize = [int]$EventData.pageSize
    }

    Show-UDToast -Message 'Preferences saved.'
}

New-UDButton -Text 'Show preferences' -OnClick {
    $preferences = Get-UDLocalStorage -Name 'preferences'

    if ($null -eq $preferences) {
        Show-UDToast -Message 'No preferences have been saved.'
        return
    }

    Show-UDToast -Message "Theme: $($preferences.Theme); page size: $($preferences.PageSize)"
}
```

L'archiviazione locale del browser è leggibile e modificabile dal codice in esecuzione nella pagina. Non vi memorizzi password, credenziali, chiavi API, token o altri dati sensibili. Consideri i valori memorizzati come input controllato dall'utente.

#### API

* Set-UDLocalStorage
* Get-UDLocalStorage

## Gestori di eventi

Molti componenti supportano gestori di eventi sotto forma di blocchi di script. Potrebbe vederli indicati anche come endpoint, poiché era questo il nome usato in Universal Dashboard v2. Questi gestori di eventi consentono di richiamare script PowerShell quando si verificano determinate azioni nella pagina.

Ad esempio, potrebbe avere un clic su un pulsante che richiama un gestore di eventi. Questo pulsante mostra un toast quando viene cliccato. Può includere qualsiasi cmdlet PowerShell valido nel codice del gestore di eventi.

```powershell
New-UDButton -Text 'Click Me' -OnClick {
   Show-UDToast 'Hello!'
}
```

### Ambito delle variabili

Le variabili vengono automaticamente inserite nell'ambito dei gestori di eventi. Può accedere alle variabili definite al di fuori del gestore di eventi.

```powershell
$MyVariable = "Hello!"
New-UDButton -Text 'Click Me' -OnClick {
   Show-UDToast $MyVariable
}
```

### Dati dell'evento

Alcuni gestori di eventi forniscono dati sotto forma di stringa o di hashtable. Questo dipende dal gestore di eventi che sta usando. Ad esempio, il gestore di eventi `-OnClick` di `New-UDButton` non fornisce dati. Al contrario, `-OnChange` di `New-UDSelect` fornisce dati dell'evento.

Può accedere ai dati dell'evento usando la variabile `$Body` come stringa, talvolta formattata come JSON, oppure usando la variabile `$EventData` come hashtable.

```powershell
New-UDSelect -Option {
    New-UDSelectOption -Name 'One' -Value 1
    New-UDSelectOption -Name 'Two' -Value 2
    New-UDSelectOption -Name 'Three' -Value 3
} -OnChange { Show-UDToast -Message $EventData }
```

## Moduli

### Inviare un modulo

Può forzare l'invio di un modulo usando il cmdlet `Invoke-UDForm`. Facoltativamente può imporre la convalida includendo il parametro `-Validate`.

```powershell
New-UDForm -Id 'form' -Content {
   New-UDTextbox -Id 'Text' -Label 'Submit Me'
} -OnSubmit {
   Show-UDToast "Hello!"
}

New-UDButton -Text "Submit Form" -OnClick {
   Invoke-UDForm -Id 'form'
}
```

### Convalidare un modulo

Può forzare la convalida di un modulo usando `Test-UDForm`.

```powershell
New-UDForm -Id 'form' -Content {
   New-UDTextbox -Id 'Text' -Label 'Submit Me'
} -OnSubmit {
   Show-UDToast "Hello!"
} -OnValidate {
   New-UDValidationResult
}

New-UDButton -Text "Submit Form" -OnClick {
   Test-UDForm -Id 'form'
}
```

## JavaScript

Può richiamare JavaScript da PowerShell usando il cmdlet `Invoke-UDJavaScript`.

```powershell
New-UDButton -Text 'Alert Me' -OnClick {
    Invoke-UDJavaScript -JavaScript 'alert("Hello!")'
}
```

#### API

* Invoke-UDJavaScript

## Toast

### Mostrare un toast

Può usare il cmdlet `Show-UDToast` per creare un messaggio toast che appare nella pagina web dell'utente finale. Avviene tramite WebSocket e mostra il toast immediatamente.

```powershell
Show-UDToast -Message 'Hello, World!'
```

### Mostrare un toast con un'icona

I toast supportano le icone come stringhe. Può usare tutte le icone FontAwesome v5.

```powershell
Show-UDToast -Icon "Ad" -Message "Test"
```

### Nascondere un toast

Nasconde un toast in base all'ID specificato.

```powershell
Show-UDToast -Message 'Hello, World!' -Id 'Toast' -Duration 30000

New-UDButton -Text 'Click' -OnClick {
    Hide-UDToast -Id 'Toast'
}
```

### API

* Show-UDToast
* Hide-UDToast

## Reindirizzamento

Può reindirizzare gli utenti a pagine diverse usando il cmdlet `Invoke-UDRedirect`. Avviene tramite WebSocket e il reindirizzamento si verifica non appena il cmdlet viene chiamato.

```powershell
Invoke-UDRedirect http://www.ironmansoftware.com
```

`Invoke-UDRedirect` reindirizza automaticamente alle pagine della dashboard quando si usa un percorso relativo.

```powershell
Invoke-UDRedirect '/page1'
```

Se desidera reindirizzare a un percorso locale esterno alla dashboard, usi il parametro `-Native`.

```powershell
Invoke-UDRedirect '/publishedFolder/test.txt' -Native
```

#### API

* Invoke-UDRedirect

## Modale

Può aprire una finestra modale usando il cmdlet `Show-UDModal`. Si apre non appena lo chiama. Può includere all'interno della finestra modale tutti i componenti che desidera.

Maggiori informazioni sulle finestre modali qui.

## Gestione dello stato dei componenti

Può gestire lo stato dei componenti in modo dinamico usando i comandi UDElement.

### Recuperare lo stato di un componente

Può ottenere lo stato di un elemento usando `Get-UDElement`. Lo stato viene restituito come hashtable. Questo è utile principalmente per i componenti di input.

```powershell
$Value = (Get-UDElement -Id 'txtExample').value
```

### Impostare lo stato di un componente

In alternativa, può impostare lo stato di un componente usando `Set-UDElement`. Deve specificare un ID e una hashtable di proprietà da impostare sul componente. Tutti i componenti integrati supportano `Set-UDElement`.

```powershell
New-UDTextbox -Id 'textbox'

New-UDButton -Text 'Click' -OnClick {
    Set-UDElement -Id 'textbox' -Properties @{
        Value = 'My Value'
    }
}
```

### Rimuovere un componente

Può rimuovere componenti dalla pagina usando `Remove-UDElement`. Il componente non appare più nella pagina.

```powershell
Remove-UDComponent -Id 'txtExample'
```

### Aggiungere un componente

Aggiunga un componente figlio a un componente padre esistente.

```powershell
New-UDElement -Id 'myDiv' -Tag div

New-UDButton -Text 'Click' -OnClick {
    Add-UDElement -ParentId 'myDiv' -Content {
        New-UDTypography -Text 'Hi'
    }
}
```

### Svuotare un componente

Può rimuovere tutti i componenti figlio da un componente esistente usando `Clear-UDElement`.

```powershell
New-UDElement -Id 'myDiv' -Tag div

New-UDButton -Text 'Click' -OnClick {
    Add-UDElement -ParentId 'myDiv' -Content {
        New-UDTypography -Text 'Hi'
    }
    Add-UDElement -ParentId 'myDiv' -Content {
        New-UDTypography -Text 'Hi'
    }
    Add-UDElement -ParentId 'myDiv' -Content {
        New-UDTypography -Text 'Hi'
    }
}

New-UDButton -Text 'Clear' -OnClick {
    Clear-UDElement -Id 'myDiv'
}
```

### Ricaricare un componente

Alcuni componenti supportano il ricaricamento. Può attivare il ricaricamento di un componente usando `Sync-UDElement`.

```powershell
New-UDDynamic -Id 'reloadMe' -Content {
    Get-Date
}

New-UDButton -Text 'Click' -OnClick {
    Sync-UDElement -Id 'reloadMe'
}
```

### Selezionare un componente

Può selezionare un componente con `Select-UDElement`.

```powershell
New-UDElement -Id 'txt' -Tag input -Properties @{ type = text }

New-UDButton -Text 'Select' -OnClick {
    Select-UDElement -Id 'txt' -ScrollToElement
}
```

## Integrazione con l'host PowerShell

Le dashboard si integrano direttamente con l'host PowerShell per fornire funzionalità basate su cmdlet standard.

### Read-Host

L'uso del cmdlet `Read-Host` fa apparire una finestra di dialogo nella dashboard dell'utente. Il testo inserito viene restituito dal cmdlet.

```powershell
$Text = Read-Host 'Enter Some Text'
Show-UDToast $Text
```

<figure><img src="https://218893503-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAje1UFQFSPx2kH2ueeCf%2Fuploads%2Fgit-blob-2f1aac4bc4868fce328541dd1f6c46e04ca4fe52%2Fimage%20(185).png?alt=media" alt=""><figcaption></figcaption></figure>

### Get-Credential

L'uso di `Get-Credential` fa apparire una finestra di dialogo che accetta un nome utente e una password. Il cmdlet restituisce un oggetto `PSCredential`.

```powershell
Get-Credential -UserName "adam"
```

<figure><img src="https://218893503-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAje1UFQFSPx2kH2ueeCf%2Fuploads%2Fgit-blob-0e3046c1a3b2c0df6d6071864593d095b836dc5f%2Fimage%20(195).png?alt=media" alt=""><figcaption></figcaption></figure>

### Write-Progress

I cmdlet che usano il flusso di avanzamento o `Write-Progress` generano una finestra di dialogo di avanzamento. Il popup mostra l'attività, la percentuale completata e l'operazione corrente.

```powershell
1..100 | ForEach-Object {
    Write-Progress -PercentComplete $_ -Activity 'Processing...' -CurrentOperation "User $_"
    Start-Sleep -Milliseconds 500
}
```

<figure><img src="https://218893503-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAje1UFQFSPx2kH2ueeCf%2Fuploads%2Fgit-blob-8eb45834c2ba1e09ca6fc862d0460864b1893bf9%2Fimage%20(326).png?alt=media" alt=""><figcaption></figcaption></figure>

Può disabilitare l'integrazione con Write-Progress impostando `$ProgressPreference` su `SilentlyContinue`.

```powershell
$ProgressPreference = 'SilentlyContinue'
```

### Richiesta di scelta

Può usare la funzione `$Host.UI.PromptForChoice` per visualizzare una finestra di dialogo a selezione multipla.

```powershell
$Title = "Welcome"
$Info = "Just to Demo Prompt for Choice"

$options = [System.Management.Automation.Host.ChoiceDescription[]] @("Power", "Shell", "Quit")
[int]$defaultchoice = 2
$opt = $host.UI.PromptForChoice($Title, $Info, $Options, $defaultchoice)
switch ($opt) {
    0 { Show-UDToast "Power" }
    1 { Show-UDToast "Shell" }
    2 { Show-UDToast "Good Bye!!!" }
}
```

<figure><img src="https://218893503-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAje1UFQFSPx2kH2ueeCf%2Fuploads%2Fgit-blob-b871b9667ae2a64f335b7605f745f308c9249a12%2Fimage%20(335).png?alt=media" alt=""><figcaption></figcaption></figure>

### Write-Host

`Write-Host` all'interno delle app scrive nella scheda **Log** dell'Admin Console relativa all'app. Per ricevere questi messaggi di log nella console degli strumenti di sviluppo del browser, abiliti la registrazione su console in `appsettings.json`.

```json
{
    "UniversalDashboard": {
        "ConsoleLog": true
    }
}
```

## API

* Get-UDElement
* Set-UDElement
* Clear-UDElement
* Remove-UDElement
* Sync-UDElement
* Select-UDElement


---

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