> 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

Può 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` archivia le proprietà dello script.
{% endhint %}

## Aggiungere un nuovo script

Per aggiungere un nuovo script, clicchi sul pulsante New Script nella pagina Automation / Scripts. Sono disponibili varie impostazioni che può fornire per lo script.

<figure><img src="/files/2AdksY7n3Tjk5kLbP23D" alt=""><figcaption><p>Finestra di dialogo New Script</p></figcaption></figure>

## Opzioni dello script

### **Name**

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

### Modulo e comando

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

### **Description**

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

### **Disable Manual Invocation**

Impedisce l'esecuzione manuale di uno script. Viene applicato sia nell'interfaccia utente sia 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 tutto il server, disponibile nella pagina Settings / General.

### **Error Action**

L'azione di errore modifica il comportamento dello script quando si verifica un errore. Per impostazione predefinita, gli errori di tipo terminating e non-terminating vengono ignorati e lo script ha sempre esito positivo. 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 apparirà 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 tutto il server. Gli ambienti PowerShell vengono individuati automaticamente al primo avvio del Universal Server oppure letti dal file `environments.ps1`. Può anche aggiungere un ambiente nella pagina Settings / Environments.

### **Timeout**

Il numero di minuti prima che lo script vada in timeout. Il valore predefinito 0 significa che lo script verrà eseguito indefinitamente. Quando uno script raggiunge il proprio timeout, 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 Secret con i ruoli, potrebbe voler fornire ruoli aggiuntivi che il chiamante potrebbe non possedere. Quando si eseguono script in una pianificazione, questi non avranno alcun ruolo, quindi fornirli tramite Execution Roles consentirà di utilizzare variabili Secret con ruoli nello script pianificato.

## Esecuzione di uno script

Può eseguire uno script nell'interfaccia utente dalla pagina Automation / Scripts cliccando su Run oppure cliccando su View e quindi su Run. In ciascun caso viene visualizzata la finestra di dialogo Run, che le consente di selezionare varie impostazioni per il processo.

<figure><img src="/files/mwGOEHA92dTsJvEC2QXM" alt=""><figcaption><p>Finestra di dialogo Run Script</p></figcaption></figure>

### 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 definiti negli script. Sfrutta l'analisi statica del codice per determinare il tipo, i valori predefiniti e alcune convalide che vengono quindi presentate 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.

<figure><img src="/files/HQwnTEk0VEvj3ttv2Uue" alt=""><figcaption><p>Finestra di dialogo dei parametri dello script</p></figcaption></figure>

### 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 script come un altro utente configurando le [variabili secret](/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 secret. Veda le variabili per maggiori informazioni sui secret.

1. Crei una nuova variabile secret PSCredential.

Clicchi su Platform \ Variables e quindi su Create Secret. 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.

<figure><img src="/files/mDPUX4fC6vny7SCjFSp0" alt=""><figcaption><p>Creare una variabile secret</p></figcaption></figure>

2. Esegua lo script e selezioni la credenziale

Torni ad Automation \ Scripts e clicchi sul pulsante Run Script. Selezioni un ambiente diverso dall'ambiente Integrated. Per impostazione predefinita sarà PowerShell 7 oppure Windows PowerShell 5.1.

Le verrà ora richiesto tramite il menu a discesa Run As di selezionare la credenziale. Da lì può selezionare la credenziale all'interno della finestra di dialogo di esecuzione.

<figure><img src="/files/6bifKMiUqdPhbLOwYYe7" alt=""><figcaption><p>Esecuzione come utente</p></figcaption></figure>

### 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 il seguente esempio. 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://www.ironmansoftware.com
#>
param($HostName)

Test-NetConnection $HostName
```

Quanto sopra produce la seguente interfaccia utente. La sinossi viene visualizzata come descrizione breve e una descrizione più lunga viene visualizzata nella sezione della descrizione. I collegamenti appaiono sotto la descrizione.

<figure><img src="/files/IM6MPmKTon5PH07wEsWT" alt=""><figcaption><p>Informazioni aggiuntive sullo script</p></figcaption></figure>

## 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 denominato `PSUModule` che contiene la seguente funzione.

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

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

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

La funzione appare esattamente come gli altri script all'interno della 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 per ambiente, utente e computer di esecuzione.

<figure><img src="/files/UA8dUuRRfOL65cHRRAnt" alt=""><figcaption><p>Statistiche dello script</p></figcaption></figure>

## 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'uso di Start-Job non registra il processo in PowerShell Universal e le informazioni di 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. Clicchi su Settings \ Environments. Successivamente, clicchi su Create New Environment. Assegni un nome all'ambiente, 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.
