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

# Ambienti

Gli ambienti le permettono di definire un eseguibile, argomenti, moduli e variabili da utilizzare durante l'esecuzione di script, l'hosting di API e dashboard.

Gli ambienti sono archiviati nel file `environments.ps1`.

## Configurazione degli ambienti

Per configurare gli ambienti, può utilizzare la pagina Impostazioni \ Ambienti.

<figure><img src="/files/Osgbcuq4z1Q5sXmmb0kX" alt=""><figcaption><p>Pagina Ambienti</p></figcaption></figure>

Gli ambienti supportano l'impostazione di nome, percorso, argomenti, moduli e variabili.

<figure><img src="/files/VbploZooWmMUAHu5EEIe" alt=""><figcaption><p>Finestra di dialogo delle impostazioni dell'ambiente</p></figcaption></figure>

### Nome

Il nome dell'ambiente. Questo nome verrà mostrato nel resto della piattaforma durante l'esecuzione degli script, la configurazione dell'ambiente host dell'API e l'hosting delle dashboard.

### Percorso e argomenti

Gli ambienti supportano la definizione di un percorso verso un eseguibile e degli argomenti per tale eseguibile. Questi devono essere PowerShell.exe oppure Pwsh.exe.

Può anche definire moduli e variabili.

### Moduli

L'elenco dei moduli le permette di definire zero o più moduli da caricare nei runspace PowerShell dell'ambiente. Questi moduli faranno parte dello stato iniziale della sessione, pertanto non sarà necessario caricarli manualmente. Gli elementi aggiunti a questo elenco possono essere nomi di moduli o percorsi completi ai file dei moduli.

### Variabili

L'elenco delle variabili le permette di definire zero o più variabili da caricare nei runspace PowerShell dell'ambiente. Questo elenco può essere composto da nomi di variabili provenienti dalla [configurazione delle variabili](/powershell-universal/it/piattaforma/variables.md).

Può anche utilizzare i caratteri jolly (`*`) per includere più variabili che corrispondono a un modello.

### PSModulePath

Può utilizzare il parametro `-PSModulePath` di `New-PSUEnvironment` per configurare ulteriori PSModulePath da includere nell'ambiente.

### Script di avvio

Gli script di avvio vengono eseguiti una volta quando l'ambiente crea il primo runspace. Per le API, questo avviene ogni volta che viene creato un runspace per servire una richiesta HTTP. Ciò può accadere frequentemente se il server è occupato. Per le app (precedentemente note come dashboard), questo avverrà ogni volta che viene creato un runspace per servire un endpoint eseguito mentre l'utente visualizza un'app (dashboard). I server occupati e le app con molti componenti dinamici lo faranno più frequentemente. Per i job, questo avverrà una volta all'avvio del job.

Gli script di avvio sono relativi alla cartella Repository. Ad esempio, se avesse uno script nella sua cartella repository denominato `startup.ps1`, dovrebbe indicare solo il nome del file nella configurazione. Se avesse uno script in una directory, dovrebbe includere anche quella.

Le variabili della piattaforma non sono disponibili negli script di avvio.

## Utilizzo degli ambienti

Gli ambienti possono essere utilizzati in tutta la piattaforma.

### API

Per selezionare l'ambiente da utilizzare, modifichi il file `settings.ps1` e includa il parametro `-ApiEnvironment` di `Set-PSUSetting`. Deve corrispondere al nome dell'ambiente.

### Automazione

Ogni script, job e pianificazione può utilizzare un ambiente. Può definire gli ambienti per gli script modificando `scripts.ps1` e impostando il parametro `-Environment` di `New-PSUScript`. Per impostare l'ambiente di una pianificazione, imposti il parametro `-Environment` di `New-PSUSchedule` in `schedules.ps1`. Quando richiama uno script, può anche scegliere un ambiente da utilizzare.

### App (dashboard)

Per utilizzare un ambiente specifico per un'app (dashboard), imposti il parametro `-Environment` di `New-PSUApp` in `dashboards.ps1`.

### Sicurezza

Per impostazione predefinita, l'autenticazione e l'autorizzazione avvengono all'interno del processo `Universal.Server.exe`. Per eseguirle da un processo diverso, può selezionare un ambiente impostando il parametro `-SecurityEnvironment` di `Set-PSUSetting` in `settings.ps1`. Consulti [Sicurezza](https://docs.powershelluniversal.com/config/security#environment) per maggiori informazioni al riguardo.

## Ambiente integrato

{% hint style="warning" %}
L'ambiente integrato non supporta l'esecuzione con credenziali alternative.
{% endhint %}

L'ambiente integrato utilizza direttamente il processo del server PowerShell Universal anziché avviare processi PowerShell esterni per servire le richieste.

L'ambiente integrato è più semplice da configurare e utilizzare rispetto ad avere più ambienti separati. Noterà anche un miglioramento delle prestazioni, poiché non è necessario serializzare e comunicare tramite comunicazione tra processi.

Lo svantaggio è che non può elevare i privilegi a credenziali alternative né utilizzare versioni alternative di PowerShell. Utilizzerà la versione corrente dell'SDK PowerShell del server PowerShell Universal. Inoltre, poiché tutti gli script PowerShell vengono eseguiti all'interno del servizio, i suoi script PowerShell possono influire sulla stabilità della piattaforma.

Legga[ Best practice ](/powershell-universal/it/config/best-practices.md#favor-non-integrated-environments)per maggiori informazioni.

### Configurazione

L'ambiente integrato è sempre disponibile e non è necessario configurarlo direttamente. Se desidera importare moduli o impostare runspace persistenti, può definire le impostazioni per l'ambiente integrato in `environments.ps1`.

{% code title=".universal\environments.ps1" %}

```powershell
New-PSUEnvironment -Name 'Integrated' -Path 'none' -Modules @('ActiveDirectory')
```

{% endcode %}

### API

Per impostare l'ambiente integrato, può utilizzare `Set-PSUSetting` in `settings.ps1`.

{% code title=".universal\settings.ps1" %}

```powershell
Set-PSUSetting -ApiEnvironment 'Integrated'
```

{% endcode %}

### Automazione

Può assegnare l'ambiente integrato a script e pianificazioni. Può anche impostare l'ambiente integrato come ambiente predefinito per la piattaforma.

```powershell
Set-PSetting -DefaultEnvironment 'Integrated'
```

Può anche scegliere l'ambiente integrato dalla finestra di dialogo di esecuzione.

### App

Può eseguire le app nell'ambiente integrato. Selezioni l'ambiente integrato dall'elenco a discesa degli ambienti.

## PowerShell 7

L'ambiente PowerShell 7 utilizza un processo di hosting incorporato per l'SDK PowerShell incluso in PowerShell Universal. Questo è l'ambiente consigliato in quanto offre la massima compatibilità con i moduli di terze parti.

L'ambiente PowerShell 7 non supporta l'utilizzo degli assembly System.Windows.Forms. Se questi assembly sono necessari per script o moduli, utilizzi un ambiente personalizzato che punta a pwsh.exe.

## Windows PowerShell 5.1

L'ambiente Windows PowerShell 5.1 utilizza un processo di hosting incorporato per il runtime PowerShell presente sulla macchina corrente. Questo è l'unico ambiente disponibile per l'esecuzione di script Windows PowerShell.

## Ambienti minimi

Gli ambienti minimi consentono di eseguire script in applicazioni da riga di comando che non si integrano con l'ambiente di hosting di PowerShell Universal. PowerShell Universal cattura `STDOUT` e `STDERR` e li visualizza nel registro del job. Alcuni casi d'uso per gli ambienti minimi includono:

* Script Python
* Script PowerShell con moduli problematici

Gli ambienti minimi non supportano quanto segue:

* Feedback
* Avanzamento
* Segreti
* Cmdlet integrati di Universal

Gli ambienti minimi riceveranno i valori delle variabili come variabili di ambiente. Quando definisce un ambiente minimo, può utilizzare la stringa di sostituzione `{scriptPath}` per impostare gli argomenti dell'ambiente e definire il percorso corretto durante l'esecuzione dello script.

Ad esempio, quanto segue crea un ambiente PowerShell 7 che non carica le librerie di hosting di PowerShell Universal.

```powershell
New-PSUEnvironment -Name 'Minimal' -Path 'pwsh' -Arguments "-File {scriptPath}" -Variables @('*') -Minimal
```

Per creare un ambiente Python, potrebbe procedere come segue.

```powershell
New-PSUEnvironment -Name 'Python' -Path 'python' -Arguments "{scriptPath}" -Variables @('*') -Minimal
```

## Compatibilità con Windows PowerShell

La compatibilità con Windows PowerShell è una funzionalità di PowerShell 7. Quando comandi e moduli non sono disponibili in PowerShell 7, la piattaforma avvia automaticamente un processo Windows PowerShell in background ed esegue il remoting locale dal processo PowerShell 7. In questo modo si ottiene la compatibilità con i moduli Windows PowerShell.

Potrebbe visualizzare un avviso nella pagina degli ambienti quando questa funzionalità di PowerShell è abilitata, a causa delle implicazioni sulla piattaforma PowerShell Universal.

### Problemi con la compatibilità WinPS in PowerShell Universal

Per ogni runspace aperto da PowerShell Universal in cui viene utilizzata la compatibilità con Windows PowerShell, verrà avviato un nuovo processo Windows PowerShell. Questi processi si arresteranno solo quando il runspace verrà riciclato.

Ciò riduce notevolmente le prestazioni a causa del numero eccessivo di processi in esecuzione e dell'utilizzo di memoria e CPU dovuto alla serializzazione e alla gestione dei runspace remoti.

La causa più comune di ciò è l'utilizzo del modulo Active Directory 1.0.0.0 da PowerShell 7.

### Disabilitare la compatibilità implicita con Windows PowerShell

Può disabilitare la compatibilità con Windows PowerShell tramite le impostazioni all'interno delle proprietà dell'ambiente.

La compatibilità con Windows PowerShell è disabilitata per impostazione predefinita nell'ambiente Integrated e non può essere abilitata.

### Utilizzare correttamente la compatibilità con Windows PowerShell

Se necessario, può rimuovere il runspace di compatibilità Windows dopo aver eseguito un comando che utilizza questa funzionalità. Ciò rimuoverà il processo Windows PowerShell. Ogni volta che questo endpoint viene eseguito, sarà necessario ristabilire la sessione.

```powershell
Import-Module PSScheduledJob -UseWindowsPowerShell
Get-ScheduledJob | Out-Null
Get-PSSession -Name 'WinPSCompatSession' | Remove-PSSession
```

Può ottenere maggiori informazioni sulla [compatibilità con Windows PowerShell qui](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_windows_powershell_compatibility?view=powershell-7.2).

## API

* [New-PSUEnvironment](/powershell-universal/it/comandi-powershell/new-psuenvironment.md)
* [Get-PSUEnvironment](/powershell-universal/it/comandi-powershell/get-psuenvironment.md)
* [Remove-PSUEnvironment](/powershell-universal/it/comandi-powershell/remove-psuenvironment.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/config/environments.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.
