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

# Script

Crei e configuri script PowerShell in PowerShell Universal, con informazioni su parametri, credenziali di esecuzione, guida basata sui commenti e statistiche dei processi.

È possibile creare script PowerShell all'interno di PowerShell Universal da eseguire manualmente, in base a una pianificazione o quando si verificano eventi all'interno della piattaforma. Vengono archiviati su disco e resi persistenti in un repository Git locale o remoto.

{% hint style="info" %}
Il file di configurazione `scripts.ps1` memorizza le proprietà dello script.
{% endhint %}

## Aggiungere un nuovo script

Per aggiungere un nuovo script, faccia clic sul pulsante New Script in **Build > Scripts**. Sono disponibili varie impostazioni che può fornire per lo script.

## Opzioni dello script

### **Name**

Questo è il nome dello script così come viene visualizzato in Universal Automation. È anche il nome utilizzato per rendere persistente lo script su disco. Il nome deve essere univoco all'interno della cartella corrente.

### Module e Command

Veda [Moduli e comandi](#modules-and-commands) di seguito.

### **Description**

Questa descrizione dello script viene visualizzata in vari punti dell'interfaccia utente di UA e viene restituita dai cmdlet di Universal.

### **Disable Manual Invocation**

Impedisce l'esecuzione manuale di uno script. Questa impostazione viene applicata nell'interfaccia utente così come nel server web e nei cmdlet.

### **Max Job History**

La cronologia massima dei processi definisce la quantità di processi archiviati durante l'esecuzione di questo script. Il valore predefinito è 100. I processi vengono inoltre eliminati in base all'impostazione della durata di conservazione dei processi valida per l'intero server, disponibile in **Settings gear > Data**.

### **Error Action**

L'azione in caso di errore modifica il comportamento dello script quando si verifica un errore. Per impostazione predefinita, gli errori con e senza interruzione vengono ignorati e lo script viene sempre completato correttamente. Può modificare questa impostazione su stop per fare in modo che gli script abbiano esito negativo immediatamente quando viene rilevato un errore.

Se desidera scrivere gli errori direttamente nel riquadro degli errori senza modificare la gestione dello script (ad esempio in un gestore di eccezioni), utilizzi `Write-PSUError` per restituire il record di errore, che comparirà nella scheda degli errori del processo.

### **Environment**

Consente di definire l'ambiente PowerShell richiesto per lo script. Per impostazione predefinita, utilizza l'ambiente PowerShell predefinito valido per l'intero server. Gli ambienti PowerShell vengono individuati automaticamente al primo avvio di Universal Server oppure letti dal file `environments.ps1`. Può anche aggiungere un ambiente in **Manage > Environments > Environments**.

### **Timeout**

Il numero di minuti prima del timeout dello script. Il valore predefinito 0 indica che lo script verrà eseguito indefinitamente. Una volta raggiunto il timeout, lo script viene annullato.

### Discard Pipeline

Se selezionata, questa opzione disabilita l'archiviazione dell'output della pipeline. Ciò riduce notevolmente il sovraccarico di CPU e di archiviazione dei processi, ma lo script continua a scrivere nei flussi di informazioni, avvisi ed errori.

### **Concurrent Jobs**

Definisce il numero massimo di processi simultanei con cui lo script può essere eseguito. Il valore predefinito è 100.

```powershell
New-PSUScript -Name Script.ps1 -Path Script.Ps1 -ConcurrentJobs 1
```

### Ruoli di esecuzione

Utilizzando la proprietà Execution Roles, può impostare quali ruoli vengono assegnati durante l'esecuzione dello script. Per impostazione predefinita, lo script viene eseguito in base ai ruoli del chiamante. In alcuni scenari, ad esempio quando si utilizzano i segreti con ruoli, potrebbe voler fornire ruoli aggiuntivi che il chiamante non possiede. Quando gli script vengono eseguiti in una pianificazione, non dispongono di alcun ruolo, pertanto fornirli tramite Execution Roles consentirà di utilizzare variabili segrete con ruoli nello script pianificato.

## Esecuzione di uno script

Può eseguire uno script nell'interfaccia utente da **Build > Scripts** facendo clic su Run oppure facendo clic su View e quindi su Run. In entrambi i casi viene visualizzata la finestra di dialogo Run, che le consente di selezionare varie impostazioni per il processo.

### Esecuzione di uno script con parametri

{% hint style="info" %}
Maggiori informazioni sui parametri [qui](/powershell-universal/it/automazione/scripts/parameters.md).
{% endhint %}

PowerShell Universal determina automaticamente i parametri così come definiti negli script. Sfrutta l'analisi statica del codice per determinare il tipo, i valori predefiniti e alcune convalide che vengono quindi presentati nell'interfaccia utente.

Ad esempio, potrebbe avere uno script con i seguenti parametri:

```powershell
param(
    $Test,
    [DateTime]$Time, 
    [int]$Number,
    [PSCredential]$Credential,
    [System.ConsoleColor]$Color
)
```

Il risultato è un insieme di opzioni di input basate sui tipi di parametri.

### Esecuzione di uno script come un altro utente

{% hint style="info" %}
L'[ambiente](/powershell-universal/it/config/environments.md) integrato non supporta l'esecuzione con credenziali alternative.
{% endhint %}

Può eseguire gli script come un altro utente configurando le [variabili segrete](/powershell-universal/it/piattaforma/variables.md#creating-a-secret-variable). PowerShell Universal utilizza il modulo Microsoft Secret Management per l'integrazione con i provider di segreti. Consulti le variabili per maggiori informazioni sui segreti.

1. Creare una nuova variabile segreta PSCredential.

Apra **Manage > Variables & Secrets > Variables**, faccia clic su Create Secret e selezioni il tipo di variabile PSCredential. Inserisca il nome utente e la password. Si assicuri che il valore Disable Run As Support non sia selezionato.

2. Eseguire lo script e selezionare la credenziale

Torni a **Build > Scripts** e faccia clic sul pulsante Run Script. Selezioni un ambiente diverso dall'ambiente Integrated. Per impostazione predefinita, sarà PowerShell 7 o Windows PowerShell 5.1.

Le verrà ora richiesto di selezionare la credenziale tramite il menu a discesa Run As. Da lì potrà selezionare la credenziale nella finestra di dialogo di esecuzione.

### Esecuzione di uno script su un altro computer

Può utilizzare il menu a discesa Computer per selezionare altre macchine su cui eseguire uno script. Il valore predefinito prevede l'esecuzione su qualsiasi computer disponibile.

### Esecuzione di uno script su tutti i computer

Può eseguire uno script su tutti i computer selezionando l'opzione All Computers dal menu a discesa Computer.

### Esecuzione di uno script da un'app con output

Se desidera eseguire uno script da un'app e visualizzarne l'output durante l'esecuzione, utilizzi l'esempio seguente. Sfrutta `Invoke-PSUScript` e `Get-PSUJobOutput`.

```powershell
New-UDButton -OnClick {
    $Job = Invoke-PSUScript -Name Script.ps1
    while($Job.Status -eq 'Running' -or $Job.Status -eq 'Queued')
    {
        [array]$Output = Get-PSUJobOutput -Job $Job
        $Job = Get-PSUJob -Id $Job.Id
        $Session:Code = $Output | ForEach-Object { 
            "$_`r`n"
        } | Join-String 
        Sync-UDElement -Id 'code'
        Start-Sleep -Seconds 1
    }
} -Text 'Run Script'

New-UDDynamic -Id 'code' -Content {
    if ($Session:Code)
    {
        New-UDSyntaxHighlighter -Code $Session:Code -Language batch
    }
}
```

### Bilanciamento del carico

PowerShell Universal utilizza un algoritmo di bilanciamento del carico basato sul server meno occupato. Se più di un server è una destinazione valida per un processo, PowerShell Universal selezionerà il server con il minor numero di processi in esecuzione.

## Remoting

Può utilizzare il remoting di PowerShell sfruttando `Invoke-Command`. PowerShell Universal non supporta l'uso di `Enter-PSSession` o `Import-PSSession`.

## Guida basata sui commenti

Può utilizzare la guida basata sui commenti per definire la descrizione, una sinossi, la guida basata sui parametri e i collegamenti per i suoi script. Questi elementi verranno visualizzati nell'interfaccia utente di PowerShell Universal.

```powershell
<#
.SYNOPSIS 

This is a script for pinging other computers. 

.DESCRIPTION

This script can ping other computers. 

.PARAMETER HostName

The host name or address to ping. 

.LINK
https://devolutions.net/powershell-universal/
#>
param($HostName)

Test-NetConnection $HostName
```

Quanto sopra produce un'interfaccia utente in cui la sinossi viene visualizzata come descrizione breve e una descrizione più lunga viene visualizzata nella sezione della descrizione. I collegamenti compaiono sotto la descrizione.

## Moduli e comandi

I comandi e i cmdlet presenti nei moduli possono essere utilizzati come destinazione degli script anziché scrivere direttamente lo script.

Supponiamo di avere un modulo chiamato `PSUModule` che contiene la funzione seguente.

```powershell
function Show-HelloWorld {
    param($Name)
    "Hello, $Name!"
}
```

È possibile esporre questa funzione come script utilizzando la sintassi seguente in `scripts.ps1`.

```powershell
New-PSUScript -Module 'PSUModule' -Command 'Show-HelloWorld'
```

La funzione viene esposta esattamente come gli altri script nella console di amministrazione. Parametri, testo della guida e altre funzionalità di PSU funzionano allo stesso modo degli script.

## Statistiche

Utilizzando la cronologia dei processi di uno script, PowerShell Universal fornisce statistiche di base sull'esecuzione dello script. Queste includono il tasso di successo, il tempo medio di esecuzione e la suddivisione delle esecuzioni per ambiente, utente e computer.

## Supporto di Start-Job

Sebbene sia possibile avviare processi utilizzando Invoke-PSUScript, potrebbe essere preferibile avviare un processo con il cmdlet Start-Job di PowerShell. L'utilizzo di Start-Job non registra il processo in PowerShell Universal e le informazioni sull'esecuzione non saranno presenti nella tabella dei processi.

Gli ambienti Integrated, PowerShell 7 e Windows PowerShell 5.1 non sono compatibili con Start-Job perché sono host PowerShell personalizzati. Per utilizzare Start-Job, dovrà configurare un ambiente PowerShell personalizzato. Apra **Manage > Environments > Environments**, faccia clic su Create New Environment, selezioni il tipo di ambiente Custom e specifichi pwsh.exe come percorso dell'eseguibile.

Ora potrà utilizzare questo ambiente per eseguire il cmdlet Start-Job.

## API

* [New-PSUScript](/powershell-universal/it/comandi-powershell/new-psuscript.md)
* [Remove-PSUScript](/powershell-universal/it/comandi-powershell/remove-psuscript.md)
* [Set-PSUScript](/powershell-universal/it/comandi-powershell/set-psuscript.md)
* [Get-PSUScript](/powershell-universal/it/comandi-powershell/get-psuscript.md)


---

# 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/automazione/scripts.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.
