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

# Variables

Les variables permettent de définir globalement des variables disponibles dans les scripts. Vous pouvez également importer des secrets qui sont aussi disponibles dans les scripts ou en tant que références d'exécution.

{% hint style="info" %}
Les variables sont stockées dans le fichier de configuration `variables.ps1`.
{% endhint %}

## Création d'une variable

Pour créer une variable, accédez à la page Platform \ Variables. Cliquez sur Create Variable pour définir une nouvelle variable.

<figure><img src="/files/38AclswAfyHT0vNdn8pc" alt=""><figcaption><p>Boîte de dialogue de création de variable</p></figcaption></figure>

Les variables seront ajoutées à vos scripts avant leur exécution.

## Création d'une variable secrète

Les variables secrètes sont stockées dans le coffre sélectionné. La valeur de ces variables n'est jamais stockée dans Universal. Pour définir une nouvelle variable secrète, cliquez sur Create Secret Variable sur la page des variables et sélectionnez l'onglet Secret.

Dans cette boîte de dialogue, vous pourrez définir des chaînes et des PSCredentials dans le coffre spécifié.

<figure><img src="/files/9bmjm3i6Qja7HiPQWWFx" alt=""><figcaption><p>Boîte de dialogue de variable secrète</p></figcaption></figure>

### Format des informations d'identification

Dans certains environnements, il peut être nécessaire de spécifier le nom de domaine dans le champ du nom d'utilisateur. Vous pouvez le spécifier au format `domain\user` ou `user@domain`. Si vous ne le faites pas, vous recevrez des erreurs lors de la tentative de démarrage de processus, tels que des scripts ou des tableaux de bord, sous ce compte utilisateur.

### Comptes de service gérés de groupe

Lorsque vous utilisez des comptes de service gérés de groupe (GMSA), vous devez vous assurer que la machine et le compte ont accès au compte GMSA. Vous pouvez suivre [le guide Microsoft ici](https://techcommunity.microsoft.com/blog/itopstalkblog/step-by-step-how-to-work-with-group-managed-service-accounts-gmsa/329864). Une fois la configuration terminée, créez de nouvelles informations d'identification dans la gestion des secrets PowerShell Universal et sélectionnez l'option Password Not Required. Saisissez le compte GMSA (p. ex. domain\user$). Tant que le compte d'hébergement dispose des privilèges appropriés, vous pourrez exécuter des tâches sous le compte GMSA.

### Validation des informations d'identification

Sous Windows, vous pouvez valider les informations d'identification avant d'enregistrer leur valeur. Cliquez sur le bouton Validate dans le champ du mot de passe pour tenter une connexion locale de l'utilisateur. Ce bouton n'apparaîtra pas sur les systèmes autres que Windows.

### Rôles

{% hint style="warning" %}
L'application de rôles à un secret empêchera celui-ci d'être accessible dans les tâches planifiées, car aucun rôle n'est appliqué dans le planificateur.
{% endhint %}

Les variables secrètes peuvent inclure un contrôle d'accès basé sur les rôles. Les rôles limitent les personnes pouvant utiliser le secret dans leurs scripts et en tant que références d'exécution.

Lorsqu'un secret a un rôle défini, il ne sera pas accessible dans les ressources qui ne peuvent pas fournir ce rôle. Cela peut inclure les éléments suivants :

* Tâches planifiées
* API ou applications non authentifiées
* Terminaux

## Coffres

### Base de données

Le coffre de base de données stocke les secrets dans la base de données PowerShell Universal. Ces secrets sont chiffrés à l'aide du chiffrement AES avec une clé personnalisable. Vous pouvez personnaliser la clé en spécifiant Secrets \ Database \ EncryptionKey.

#### appsettings.json

Vous pouvez configurer ce paramètre dans appsettings.json.

```json
"Secrets": {
  "Database": {
    "EncryptionKey": "=b0ywQA@VOSdr&R7an5g&XK6NVO%s4Tf"
  }
}
```

#### Variable d'environnement

Vous pouvez configurer ce paramètre à l'aide d'une variable d'environnement.

```powershell
$Env:Secrets__Database__EncryptionKey = "=b0ywQA@VOSdr&R7an5g&XK6NVO%s4Tf"
```

### BuiltInLocalVault

{% hint style="warning" %}
Si PowerShell Universal est exécuté en tant que compte de service géré de groupe, il ne peut pas utiliser le `BuiltInLocalVault`.
{% endhint %}

Les valeurs des secrets avec le `BuiltInLocalVault` sont stockées dans l'instance du gestionnaire d'informations d'identification Windows du principal de sécurité qui exécute PSU. Par exemple, le compte de service de l'utilisateur exécutant le service Universal. Si vous changez d'utilisateur (par exemple en exécutant le service sous un compte de service), le nouveau compte n'aura pas accès aux secrets de l'utilisateur précédent et vous devrez ajouter de nouveau ces secrets.

### PSUSecretStore

{% hint style="warning" %}
Si PowerShell Universal est exécuté en tant que compte de service géré de groupe, il ne peut pas utiliser le `PSUSecretStore`.
{% endhint %}

Le coffre `PSUSecretStore` est intégré au module Microsoft `SecretStore` pour stocker les secrets dans un fichier multiplateforme. Ce fichier est lié au compte utilisateur actuel exécutant PowerShell Universal. Le mot de passe du coffre est stocké dans `appsettings.json`.

### Az.KeyVault

Par défaut, nous n'incluons pas l'extension Azure Key Vault directement dans PowerShell Universal. À partir de PowerShell Universal v4.0.11, un conteneur incluant les modules Az.Accounts et Az.KeyVault requis est disponible pour vous permettre d'utiliser KeyVault immédiatement. Celui-ci est disponible sur [Docker Hub](https://hub.docker.com/r/ironmansoftware/universal/tags?page=1\&name=modules).

Vous trouverez ci-dessous comment le configurer. Cet exemple utilise une version d'application web hébergée sur Azure de PowerShell Universal.

Dans Azure, vous devrez configurer une identité gérée pour votre application web. Cette étape n'est pas nécessairement requise si vous exécutez en dehors d'Azure. Vous pouvez activer l'identité gérée sous la page Identity de votre application web.

![](/files/RGTfFYoncN5EtGoHQvYd)

Ensuite, vous devrez autoriser votre identité gérée à accéder à votre coffre de clés et à lire votre abonnement. Vous pouvez ajouter l'identité gérée au groupe Reader intégré pour autoriser l'accès à l'abonnement.

![](/files/he6nkdB54GkYDYa5ISn7)

Puis, tous les privilèges de gestion des secrets et des clés ont été accordés à l'identité gérée dans la ressource Key Vault.

![](/files/5pqRzOlZxSQv54iB3UZf)

Enfin, vous devrez enregistrer le coffre de clés et vous connecter à Azure au démarrage de l'application web. Cela peut être accompli à l'aide des modules Az.Account et Az.KeyVault.

Après avoir déployé votre application web, vous devrez d'abord installer les modules Az.Account et Az.KeyVault. Vous pouvez le faire sur la page des modules. Ils seront installés dans le référentiel local de l'application web.

![](/files/Db3R7GYC4u6QaFc8MYyr)

Ensuite, créez un script dans PowerShell Universal pour vous connecter à Azure et enregistrer le coffre. Exécutez le script pour vérifier qu'il fonctionne correctement.

```powershell
$sub = 'affdf0d4-eed5-48a6-889c-599d482xxxxx'
Connect-AzAccount -Id -Scope CurrentUser -SubscriptionId $sub

Register-SecretVault -ModuleName Az.KeyVault -Name AzureKeyVault -VaultParameters @{ 
    AZKVaultName = 'psu-demo'
    SubscriptionId = $sub
} -AllowClobber
```

Désormais, lors de la création de secrets, vous verrez AzureKeyVault disponible.

<figure><img src="/files/IL8KlG7BfW7Or81EPSsI" alt=""><figcaption><p>Sélecteur de coffre pour les variables secrètes</p></figcaption></figure>

Pour s'assurer que l'application est connectée à Azure et que le coffre de clés est enregistré, exécutez le script dans `vaults.ps1`. Nous recommandons d'exécuter le script dans un processus PowerShell externe pour éviter les conflits d'assembly avec les DLL de PowerShell Universal.

```powershell
$pwsh = (Get-Command pwsh).Path
& $pwsh -File "$PSScriptRoot\registerVault.ps1"
```

Ce script s'exécute avant l'enregistrement des variables et la localisation des coffres. Vous pouvez créer ce fichier directement dans le répertoire Repository\\.universal. Il sera exécuté au démarrage du système avant les autres scripts de configuration.

### vaults.ps1

Le fichier `vaults.ps1` contient les commandes d'enregistrement des coffres. Bien que l'exemple ci-dessus définisse un enregistrement de coffre de secrets Azure KeyVault, vous pouvez en réalité inclure tout enregistrement de coffre dont vous avez besoin dans ce fichier.

Vous pouvez modifier les coffres en cliquant sur Platform \ Variables \ Vaults, puis accéder à l'onglet vaults.ps1.

## Importation de variables secrètes

Vous pouvez également importer des secrets préexistants en tant que variables dans Universal. Les valeurs des variables ne sont pas importées, mais seront recherchées lors de l'exécution. Cliquez sur le bouton Import Secret pour importer des secrets.

## Utilisation des variables

Les variables peuvent être utilisées dans les API, les scripts et les tableaux de bord. Lors de l'utilisation des environnements par défaut, toutes les variables sont automatiquement importées. Cela est accompli en spécifiant le paramètre `-Variable` de `New-PSUEnvironment` avec un caractère générique (\*). Si vous utilisez vos propres environnements, vous devrez configurer [les variables que vous souhaitez inclure](https://docs.powershelluniversal.com/config/environments#variables). Vous pouvez référencer une variable comme n'importe quelle autre variable PowerShell. La variable contiendra la valeur que vous avez définie. Si vous utilisez un secret, elle contiendra la valeur du secret.

```
$MyVariable
```

Vous pouvez personnaliser les variables autorisées dans un environnement en personnalisant le paramètre `-Variable` des environnements.

Consultez [Environnements](/powershell-universal/fr/config/environments.md#variables) pour plus d'informations.

## Portée des secrets

Pour accéder aux secrets que vous avez ajoutés à PowerShell Universal, vous pouvez utiliser la portée `$Secret`. Par exemple, si vous avez défini un secret nommé `Credential`, vous pouvez accéder à ce secret partout avec la portée des secrets. Vous ne pouvez pas définir des secrets à l'aide de la portée des secrets.

```powershell
Invoke-Command -Credential $Secret:Credential { Write-Host "Hello" }
```

### Accès aux variables par nom

Vous pouvez accéder aux variables par nom en utilisant le préfixe `$Secret:`.

```powershell
# PSCredential
$Secret:MyNewSecret.UserName
$Secret:MyNewSecret.Password

# String
$Secret:DashboardSecret
```

### Accès aux valeurs de manière dynamique

Vous pouvez accéder à la portée des secrets de manière dynamique en utilisant `Get-Item`. La portée des secrets est implémentée en tant que fournisseur. Cela est utile si vous n'avez pas de noms de variables statiques.

```powershell
# PSCredential
(Get-ChildItem "Secret:MyNewSecret").UserName
(Get-ChildItem "Secret:MyNewSecret").Password

# String
(Get-ChildItem "Secret:DashboardSecret")
```

### ForEach-Object -Parallel

Pour utiliser des secrets avec `ForEach-Object` et le paramètre `-Parallel`, vous devrez tirer parti du mot-clé `$using`.

```powershell
1..5 | ForEach-Object -Parallel {
  $using:Secret:MySecret
}
```

## Configuration du mot de passe `PSUSecretStore`

Par défaut, le mot de passe du coffre `PSUSecretStore` est stocké dans `appsettings.json` sous Secrets \ SecretStore \ Password.

## Variables intégrées

Les variables suivantes sont disponibles dans tous les environnements de PowerShell Universal.

| Nom             | Type   | Description                                                                   |
| --------------- | ------ | ----------------------------------------------------------------------------- |
| $PSUEnvironment | string | Le nom de l'environnement dans lequel le script s'exécute (p. ex. Integrated) |
| $Repository     | string | Le chemin absolu vers le dossier du référentiel.                              |

### API

Il existe un ensemble de variables prédéfinies disponibles dans les points de terminaison API. Vous pourrez utiliser ces variables dans vos scripts.

| Variable         | Description                                                                                                                                                                                                               | Type                                                                 |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| $Url             | URL utilisée par le client pour appeler le point de terminaison                                                                                                                                                           | String                                                               |
| $Method          | La méthode HTTP utilisée pour appeler le point de terminaison                                                                                                                                                             | String                                                               |
| $Headers         | En-têtes fournis par le client pour appeler le point de terminaison                                                                                                                                                       | Hashtable                                                            |
| $Body            | La chaîne encodée en UTF8 du contenu de la requête                                                                                                                                                                        | String                                                               |
| $Data            | Tableau d'octets binaires pour le contenu de la requête                                                                                                                                                                   | Byte\[]                                                              |
| $RemoteIpAddress | L'adresse IP distante utilisée pour effectuer la requête.                                                                                                                                                                 | String                                                               |
| $LocalIpAddress  | L'adresse IP locale utilisée pour traiter la requête.                                                                                                                                                                     | String                                                               |
| $RemotePort      | Le port distant utilisé pour effectuer la requête.                                                                                                                                                                        | Integer                                                              |
| $LocalPort       | Le port local utilisé pour traiter la requête.                                                                                                                                                                            | Integer                                                              |
| $Identity        | Le nom d'identité du principal accédant à l'API.                                                                                                                                                                          | String                                                               |
| $UrlDefinition   | La définition de l'URL.                                                                                                                                                                                                   | String                                                               |
| $ConnectionId    | L'[identifiant de connexion du contexte HTTP](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.connectioninfo.id?view=aspnetcore-6.0#Microsoft_AspNetCore_Http_ConnectionInfo_Id).                   | String                                                               |
| $SessionId       | L'[identifiant de session du contexte HTTP.](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.isession.id?view=aspnetcore-6.0#Microsoft_AspNetCore_Http_ISession_Id)                                 | String                                                               |
| $RequestId       | L'[identifiant de requête du contexte HTTP.](https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.httpcontext.traceidentifier?view=aspnetcore-6.0#Microsoft_AspNetCore_Http_HttpContext_TraceIdentifier) | String                                                               |
| $ClaimsPrincipal | Le principal de revendications de l'utilisateur actuel. Il s'agit du même objet que celui fourni aux stratégies d'accès basées sur les rôles.                                                                             | [ClaimPrincipal](/powershell-universal/fr/apps/role-based-access.md) |

### Applications

Vous trouverez ci-dessous les variables disponibles dans les applications, en plus des variables globales.

| Nom              | Description                                                                                                                                   | Type                                                                 |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| $User            | Le nom d'utilisateur de l'utilisateur connecté. $Null si l'authentification est désactivée.                                                   | String                                                               |
| $Roles           | Les rôles accordés à l'utilisateur. $Null si l'authentification est désactivée.                                                               | String\[]                                                            |
| $RemoteIpAddress | L'adresse IP distante de l'utilisateur connecté.                                                                                              | String                                                               |
| $RemotePort      | Le port distant de l'utilisateur connecté.                                                                                                    | Int                                                                  |
| $ClaimsPrincipal | Le principal de revendications de l'utilisateur actuel. Il s'agit du même objet que celui fourni aux stratégies d'accès basées sur les rôles. | [ClaimPrincipal](/powershell-universal/fr/apps/role-based-access.md) |
| $Headers         | Les en-têtes fournis par le navigateur.                                                                                                       | hashtable                                                            |
| $Cookies         | Les cookies de requête fournis par le navigateur.                                                                                             | hashtable                                                            |
| $PSUAppToken     | Le jeton d'application de l'utilisateur actuel. Disponible uniquement lorsque -GrantAppToken est activé.                                      | string                                                               |
| $PSUComputerName | L'URL du serveur PSU. Disponible uniquement lorsque -GrantAppToken est activé.                                                                | string                                                               |
| $DashboardName   | Le nom de l'application actuelle                                                                                                              | string                                                               |
| $Query           | Les paramètres de chaîne de requête de l'URL de l'application                                                                                 | Hashtable                                                            |
| $RefreshToken    | Le jeton d'actualisation lors de l'utilisation de OpenID Connect                                                                              | string                                                               |
| $AccessToken     | Le jeton d'application lors de l'utilisation de OpenID Connect                                                                                | string                                                               |
| $UDPage          | Le nom de la page actuelle.                                                                                                                   | string                                                               |

### Scripts

Il existe plusieurs variables intégrées définies lors de l'exécution d'une tâche. Vous pouvez utiliser ces variables dans vos scripts pour récupérer des informations sur la tâche en cours.

| Nom           | Description                                                                                                                                                |
| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| $UAJob        | La tâche en cours d'exécution. Elle inclura des propriétés telles que le script, l'utilisateur ayant démarré la tâche et la date de démarrage.             |
| $UAJobId      | L'identifiant de la tâche en cours d'exécution.                                                                                                            |
| $UAScript     | Le script en cours d'exécution. Il inclura des propriétés telles que le nom du script et le chemin vers le script.                                         |
| $UAScriptId   | L'identifiant du script en cours d'exécution.                                                                                                              |
| $UASchedule   | La planification utilisée pour démarrer le script.                                                                                                         |
| $UAScheduleId | L'identifiant de la planification ayant démarré le script.                                                                                                 |
| $AccessToken  | Lors de l'utilisation de l'authentification OIDC, vous pouvez récupérer le jeton d'accès de l'utilisateur actuel pour accéder à des ressources en son nom. |
| $Roles        | Les rôles de l'appelant du script.                                                                                                                         |

#### Structure de l'objet $UAJob

Notez que les propriétés peuvent être nulles. Les objets `DateTime` sont retournés dans le fuseau horaire UTC.

```csharp
class Job {
    public long Id { get; set; }
    public DateTime CreatedTime { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
    public JobStatus Status { get; set; }
    public string Output { get; set; }
    public string ScriptFullPath { get; set; }
    public Identity Identity { get; set; }
    public Job ParentJob { get; set; }
    public int ParentLineNumber { get; set; }
    public string ComputerName { get; set; }
    public int ProcessId { get; set; }
    public long MemoryBytes { get; set; }
    public int RunspaceId { get; set; }
    public string Activity { get; set; }
    public string CurrentOperation { get; set; }
    public int PercentComplete { get; set; }
    public int SecondsRemaining { get; set; }
    public string StatusDescription { get; set; }
    public string Environment { get; set; }
    public Computer Computer { get; set; }
    public ActionPreference ErrorAction { get; set; }
    public IEnumerable<Job> Children { get; set; }
    public IEnumerable<JobParameter> Parameters { get; set; }
    public string Credential { get; set; }
    public long ScheduleId { get; set; }
    public bool Triggered { get; set; }
    public string Trigger { get; set; }
    public int RetryCount { get; set; }
    public string Tags { get; set; }
    public string Schedule { get; set; }
    public bool Archived { get; set; }
    public bool Batch { get; set; }
    public Guid? RunId { get; set; }
    public string Roles { get; set; }
}

public enum JobStatus
{
    Queued,
    Running,
    Completed,
    Failed,
    WaitingOnFeedback,
    Canceled,
    Canceling,
    Historical,
    Active,
    TimedOut,
    Warning,
    Error
}
```

#### Récupération de l'utilisateur ayant démarré un script

Vous pouvez récupérer le nom de l'utilisateur ayant démarré le script en utilisant la variable `UAJob`.

```
$UAJob.Identity.Name
```

#### Vérification si une tâche a été exécutée manuellement

Vous pouvez vérifier si une tâche a été exécutée manuellement en utilisant les propriétés Schedule et Trigger.

```powershell
$Manual = $UAJob.Schedule -eq $null -and $UAJob.Trigger -eq $null
```

## Variables de préférence

Les variables de préférence peuvent être configurées sur un script, lors de l'exécution d'une tâche et au niveau global. Celles-ci incluent :

* DebugPreference
* ErrorActionPreference
* InformationPreference
* ProgressPreference
* VerbosePreference
* WarningPreference

Les variables de préférence ont une priorité. La liste suivante est ordonnée par priorité. Par exemple, si un script définit manuellement la variable `$DebugPreference`, elle remplacera la valeur définie dans la boîte de dialogue des propriétés du script.

* Script
* Run Dialog ou Invoke-PSUScript
* Propriétés du script
* Paramètres globaux

## API

* [New-PSUVariable](https://github.com/Devolutions/doc-gitbook/blob/master/translations/fr/powershell-universal/cmdlets/New-PSUVariable.txt)
* [Get-PSUVariable](https://github.com/Devolutions/doc-gitbook/blob/master/translations/fr/powershell-universal/cmdlets/Get-PSUVariable.txt)
* [Remove-PSUVariable](https://github.com/Devolutions/doc-gitbook/blob/master/translations/fr/powershell-universal/cmdlets/Remove-PSUVariable.txt)
* [Set-PSUVariable](https://github.com/Devolutions/doc-gitbook/blob/master/translations/fr/powershell-universal/cmdlets/Set-PSUVariable.txt)


---

# 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:

```
GET https://docs.devolutions.net/powershell-universal/fr/plateforme/variables.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
