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

# Scripts

Créez et configurez des scripts PowerShell dans PowerShell Universal, en couvrant les paramètres, les identifiants d'exécution, l'aide basée sur les commentaires et les statistiques des tâches.

Vous pouvez créer des scripts PowerShell dans PowerShell Universal pour les exécuter manuellement, selon un horaire ou lorsque des événements se produisent dans la plateforme. Ils sont stockés sur disque et persistés dans un dépôt Git local ou distant.

{% hint style="info" %}
Le fichier de configuration `scripts.ps1` stocke les propriétés du script.
{% endhint %}

## Ajouter un nouveau script

Pour ajouter un nouveau script, cliquez sur le bouton New Script sous **Build > Scripts**. Divers paramètres peuvent être fournis pour le script.

## Options de script

### **Nom**

Il s'agit du nom du script tel qu'affiché dans Universal Automation. C'est aussi le nom utilisé pour persister le script sur disque. Le nom doit être unique dans le dossier actuel.

### Module et commande

Voir [Modules et commandes](#modules-and-commands) ci-dessous.

### **Description**

Cette description du script s'affiche à divers endroits dans l'interface UA et est retournée par les applets de commande Universal.

### **Désactiver l'invocation manuelle**

Cela empêche un script d'être exécuté manuellement. Cette règle est appliquée dans l'interface ainsi que dans le serveur web et les applets de commande.

### **Historique maximal des tâches**

L'historique maximal des tâches définit le nombre de tâches stockées lors de l'exécution de ce script. La valeur par défaut est 100. Les tâches sont également nettoyées en fonction du paramètre de durée de rétention des tâches à l'échelle du serveur sous **Settings gear > Data**.

### **Action en cas d'erreur**

L'action en cas d'erreur modifie la façon dont le script réagit lorsqu'il rencontre une erreur. Par défaut, les erreurs bloquantes et non bloquantes sont ignorées et le script réussit toujours. Vous pouvez changer ce paramètre à « stop » pour que les scripts échouent immédiatement lorsqu'une erreur est rencontrée.

Si vous souhaitez écrire des erreurs directement dans le volet d'erreurs sans modifier la façon dont le script est traité (par exemple dans un gestionnaire d'exceptions), utilisez `Write-PSUError` pour produire l'enregistrement d'erreur; celui-ci apparaîtra dans l'onglet des erreurs de la tâche.

### **Environnement**

Cela vous permet de définir l'environnement PowerShell requis pour le script. Par défaut, il utilise l'environnement PowerShell par défaut à l'échelle du serveur. Les environnements PowerShell sont automatiquement localisés au premier démarrage du serveur Universal ou lus à partir du fichier `environments.ps1`. Vous pouvez aussi ajouter un environnement sous **Manage > Environments > Environments**.

### **Délai d'expiration**

Le nombre de minutes avant l'expiration du script. La valeur par défaut de 0 signifie que le script s'exécutera indéfiniment. Lorsqu'un script atteint son délai d'expiration, il est annulé.

### Abandonner le pipeline

Lorsque cette option est cochée, le stockage de la sortie du pipeline est désactivé. Cela réduit considérablement la charge de traitement et de stockage des tâches, mais le script écrit toujours dans les flux d'information, d'avertissement et d'erreur.

### **Tâches simultanées**

Définit le nombre maximal de tâches simultanées avec lesquelles le script peut être exécuté. La valeur par défaut est 100.

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

### Rôles d'exécution

En utilisant la propriété Execution Roles, vous pouvez définir quels rôles sont attribués pendant l'exécution du script. Par défaut, le script s'exécute en fonction des rôles de l'appelant. Dans certains scénarios, par exemple lors de l'utilisation de secrets avec des rôles, vous pourriez vouloir fournir des rôles supplémentaires que l'appelant ne possède peut-être pas. Lorsque des scripts sont exécutés dans un horaire, ils n'ont aucun rôle; les fournir au moyen des rôles d'exécution permettra d'utiliser des variables secrètes avec des rôles dans le script planifié.

## Exécuter un script

Vous pouvez exécuter un script dans l'interface à partir de **Build > Scripts** en cliquant sur Run ou en cliquant sur View puis sur Run. Dans chaque cas, le dialogue d'exécution s'affiche, vous permettant de sélectionner divers paramètres pour la tâche.

### Exécuter un script avec des paramètres

{% hint style="info" %}
Apprenez-en plus sur les paramètres [ici](/powershell-universal/fr/automatisation/scripts/parameters.md).
{% endhint %}

PowerShell Universal détermine automatiquement les paramètres tels que définis dans vos scripts. Il tire parti de l'analyse statique du code pour déterminer le type, les valeurs par défaut et certaines validations qui sont ensuite présentés dans l'interface.

Par exemple, vous pourriez avoir un script avec les paramètres suivants :

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

Le résultat est un ensemble d'options de saisie basées sur les types de paramètres.

### Exécuter un script en tant qu'un autre utilisateur

{% hint style="info" %}
L'[environnement](/powershell-universal/fr/config/environments.md) intégré ne prend pas en charge l'exécution avec des identifiants alternatifs.
{% endhint %}

Vous pouvez exécuter des scripts en tant qu'un autre utilisateur en configurant des [variables secrètes](/powershell-universal/fr/plateforme/variables.md#creating-a-secret-variable). PowerShell Universal utilise le module Microsoft Secret Management pour s'intégrer aux fournisseurs de secrets. Consultez la section sur les variables pour plus d'information sur les secrets.

1. Créez une nouvelle variable secrète PSCredential.

Ouvrez **Manage > Variables & Secrets > Variables**, cliquez sur Create Secret, puis sélectionnez le type de variable PSCredential. Saisissez le nom d'utilisateur et le mot de passe. Assurez-vous que la valeur Disable Run As Support est décochée.

2. Exécutez le script et sélectionnez l'identifiant

Retournez à **Build > Scripts** et cliquez sur le bouton Run Script. Sélectionnez un environnement autre que l'environnement Integrated. Par défaut, ce sera soit PowerShell 7, soit Windows PowerShell 5.1.

Vous serez maintenant invité, au moyen du menu déroulant Run As, à sélectionner l'identifiant. À partir de là, vous pouvez sélectionner l'identifiant dans le dialogue d'exécution.

### Exécuter un script sur un autre ordinateur

Vous pouvez utiliser le menu déroulant Computer pour sélectionner d'autres machines sur lesquelles exécuter un script. La valeur par défaut est d'exécuter sur n'importe quel ordinateur disponible.

### Exécuter un script sur tous les ordinateurs

Vous pouvez exécuter un script sur tous les ordinateurs en sélectionnant l'option All Computers dans le menu déroulant Computer.

### Exécuter un script à partir d'une appli avec sortie

Si vous souhaitez exécuter un script à partir d'une appli et afficher la sortie au fur et à mesure de son exécution, utilisez l'exemple suivant. Il tire parti de `Invoke-PSUScript` et de `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
    }
}
```

### Équilibrage des charges

PowerShell Universal utilise un algorithme d'équilibrage des charges de type « serveur le moins occupé ». Si plus d'un serveur est une cible valide pour une tâche, PowerShell Universal sélectionnera le serveur ayant le plus petit nombre de tâches en cours d'exécution.

## Communication à distance

Vous pouvez utiliser la communication à distance PowerShell en tirant parti de `Invoke-Command`. PowerShell Universal ne prend pas en charge l'utilisation de `Enter-PSSession` ni de `Import-PSSession`.

## Aide basée sur les commentaires

Vous pouvez utiliser l'aide basée sur les commentaires pour définir la description, un synopsis, l'aide relative aux paramètres et des liens pour vos scripts. Ceux-ci seront affichés dans l'interface de 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
```

Ce qui précède produit une interface utilisateur où le synopsis s'affiche comme courte description, et une description plus longue s'affiche dans la section de description. Les liens apparaissent sous la description.

## Modules et commandes

Les commandes et les applets de commande trouvées dans les modules peuvent être utilisées comme cible des scripts plutôt que d'écrire le script directement.

Supposons que nous ayons un module appelé `PSUModule` qui contient la fonction suivante.

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

Il est possible d'exposer cette fonction en tant que script en utilisant la syntaxe suivante dans `scripts.ps1`.

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

La fonction apparaît comme les autres scripts dans la console d'administration. Les paramètres, le texte d'aide et les autres fonctionnalités de PSU fonctionnent de la même façon qu'avec les scripts.

## Statistiques

À l'aide de l'historique des tâches d'un script, PowerShell Universal fournit des statistiques de base sur l'exécution du script. Celles-ci comprennent le taux de réussite, le temps d'exécution moyen et la répartition de l'exécution par environnement, utilisateur et ordinateur.

## Prise en charge de Start-Job

Bien qu'il soit possible de démarrer des tâches à l'aide de Invoke-PSUScript, il peut être souhaitable de démarrer une tâche avec l'applet de commande PowerShell Start-Job. L'utilisation de Start-Job n'enregistre pas la tâche auprès de PowerShell Universal et l'information d'exécution ne sera pas présente dans la table des tâches.

Les environnements Integrated, PowerShell 7 et Windows PowerShell 5.1 ne sont pas compatibles avec Start-Job, car ce sont des hôtes PowerShell personnalisés. Pour utiliser Start-Job, vous devrez configurer un environnement PowerShell personnalisé. Ouvrez **Manage > Environments > Environments**, cliquez sur Create New Environment, sélectionnez le type d'environnement Custom et spécifiez pwsh.exe comme chemin de l'exécutable.

Vous pourrez maintenant utiliser cet environnement pour exécuter l'applet de commande Start-Job.

## API

* [New-PSUScript](/powershell-universal/fr/commandes-powershell/new-psuscript.md)
* [Remove-PSUScript](/powershell-universal/fr/commandes-powershell/remove-psuscript.md)
* [Set-PSUScript](/powershell-universal/fr/commandes-powershell/set-psuscript.md)
* [Get-PSUScript](/powershell-universal/fr/commandes-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/fr/automatisation/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.
