> 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/pam/fr/knowledge-base/knowledge-base-articles/custom-pam-provider-action-scripts-in-devolutions-server.md).

# Scripts d'action de fournisseur PAM personnalisé dans Devolutions Server

L'utilisation de fournisseurs PAM personnalisés exige la création de scripts d'action, qui sont placés dans la section ***Script*** de chaque action pendant le processus de création du modèle.

Les scripts d'action sont des scripts PowerShell exécutés par Devolutions PAM, et les mêmes meilleures pratiques applicables à tout script PowerShell doivent être respectées. Cependant, certaines nuances doivent être prises en compte lors de la rédaction des scripts d'action.

{% hint style="success" %}
La maîtrise des scripts PowerShell est essentielle pour créer des fournisseurs PAM personnalisés. Il est recommandé de posséder au moins un niveau intermédiaire en création de scripts avant de tenter de créer des scripts d'action.
{% endhint %}

### Paramètres de script du terminal du fournisseur d'identité

Chaque script d'action doit inclure un ensemble de paramètres par lesquels le fournisseur PAM personnalisé transmet des valeurs. Bien que les spécificités puissent varier, les scripts d'action doivent partager un ensemble commun de paramètres pour se connecter au terminal du fournisseur d'identité. Voici un exemple de la façon de les définir :

```powershell
[Parameter(Mandatory)]
[string]$IdentityProviderEndpoint,
[Parameter(Mandatory)]
[string]$IdentityProviderEndpointUserName,
[Parameter(Mandatory)]
[securestring]$IdentityProviderEndpointPassword
```

{% hint style="success" %}
Bien qu'il y ait une certaine flexibilité dans la dénomination des paramètres au sein des scripts d'action (à condition qu'ils correspondent à ce qui est spécifié pendant le processus de création du modèle dans les fournisseurs PAM personnalisés), il est conseillé d'utiliser un ensemble standard de paramètres afin de maintenir la cohérence et la clarté des conventions de dénomination.
{% endhint %}

Dans cet exemple, chaque paramètre est marqué comme obligatoire, forçant le fournisseur à les utiliser. Assurez-vous d'utiliser le type `securestring` pour le paramètre `IdentityEndpointPassword`, car les fournisseurs PAM personnalisés l'exigent afin d'empêcher la transmission et le traitement de mots de passe en texte en clair.

Lors de la construction du modèle de fournisseur PAM personnalisé, ces paramètres du terminal du fournisseur d'identité correspondent à ceux définis pendant le processus de création du modèle.

### Gestion des permissions optionnelles et par défaut

Lorsque vous devez offrir la possibilité de transmettre une valeur à un paramètre de script sans l'exiger, ce paramètre est considéré comme optionnel et n'est utilisé que lorsqu'une valeur lui est transmise.

Pendant la création d'un modèle de fournisseur PAM personnalisé, il est possible de définir des propriétés de fournisseur et de compte, et de spécifier si elles sont obligatoires ou optionnelles.

Les paramètres du script d'action pour le fournisseur mentionné ci-dessus peuvent être structurés comme suit, chacun correspondant aux propriétés du modèle de fournisseur PAM personnalisé, avec des valeurs par défaut attribuées aux paramètres optionnels.

````
```powershell
[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [string]$IdentityProviderEndpoint,

    [Parameter(Mandatory)]
    [string]$IdentityProviderEndpointUserName,

    [Parameter(Mandatory)]
    [securestring]$IdentityProviderEndpointPassword,

    [Parameter()]
    [string]$Instance = '.',

    [Parameter()]
    [int]$Port = 1433
)
Write-Host "Using the instance of [$Instance] and the port of [$Port] here in the code somewhere."
````

Si ce script PowerShell était exécuté en dehors du fournisseur PAM personnalisé sans que les paramètres optionnels soient spécifiés, il fonctionnerait comme prévu, en utilisant les valeurs par défaut.

```powershell
.\actionscript.ps1 -IdentityProviderEndpoint 'hostname' -IdentityProviderEndpointUserName 'admin' -IdentityProviderEndpointPassword (ConvertTo-SecureString -String 'P@$$word' -AsPlainText -Force)
```

![](https://cdnweb.devolutions.net/docs/ab_how-to-articles-create-anyidentity-action-scripts_3-8.png)

Cependant, lors de la construction du modèle de fournisseur PAM personnalisé et de la fourniture des seuls paramètres obligatoires, en s'appuyant sur les valeurs par défaut internes du script, les fournisseurs PAM personnalisés remplacent ces valeurs par défaut.

![](https://cdnweb.devolutions.net/docs/DVLS4217_2025_2.png)

Lorsque les fournisseurs PAM personnalisés exécutent un script d'action, ils transmettent invariablement des valeurs à tous les paramètres. Dans les cas où aucune valeur n'est définie, les fournisseurs PAM personnalisés transmettent une valeur `null`, ou, si le paramètre est de type entier, une valeur `0`.

Pour contourner cela, les valeurs par défaut ne devraient pas être définies dans les paramètres du script. Ce sont plutôt des conditions à l'intérieur du script qui devraient déterminer les valeurs par défaut.

```powershell
[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [string]$IdentityProviderEndpoint,

    [Parameter(Mandatory)]
    [string]$IdentityProviderEndpointUserName,

    [Parameter(Mandatory)]
    [securestring]$IdentityProviderEndpointPassword,

    [Parameter()]
    [string]$Instance,

    [Parameter()]
    [int]$Port
)
if (!$Instance) { $Instance = '.' }
if (!$Port) { $Port = 1433 }
Write-Output "Using the instance of [$Instance] and the port of [$Port] here in the code somewhere."
```

Bien que cela ne soit généralement pas recommandé par les meilleures pratiques PowerShell, fournir les valeurs de paramètres par défaut de cette manière est une exigence pour les fournisseurs PAM personnalisés.

![](https://cdnweb.devolutions.net/docs/DVLS4218_2025_2.png)

### Gestion de la sortie

Les scripts d'action sont ultimement exécutés dans l'environnement des fournisseurs PAM personnalisés. Toute sortie qu'ils génèrent est interprétée, stockée et/ou affichée dans l'interface web de Devolutions Server.

Pour s'assurer que les scripts d'action produisent la sortie attendue, il est recommandé qu'ils retournent leur sortie de seulement quatre façons :

* Utiliser le mot-clé `throw` pour générer une erreur avec arrêt en utilisant le flux d'erreur.
* Utiliser l'applet de commande `Write-Error` pour générer une erreur sans arrêt en utilisant le flux d'erreur.
* Utiliser l'applet de commande `Write-Output` pour retourner de l'information au flux de sortie.
* Envoyer de l'information directement au flux de sortie.

Voici des exemples de scripts d'action et les résultats correspondants dans la fonctionnalité ***Tester le script*** de la zone ***Résultats*** des fournisseurs PAM personnalisés.

```powershell
Write-Verbose -Message 'This is a verbose message.'
Write-Information -MessageData 'information action'
Write-Output 'output stream here'
Write-Host 'write-host output here'
Write-Error 'error'
```

![](https://cdnweb.devolutions.net/docs/DVLS4219_2025_2.png)

```powershell
Write-Verbose -Message 'This is a verbose message.'
Write-Information -MessageData 'information action'
Write-Output 'output stream here'
'output stream here directly'
Write-Host 'write-host output here'
```

![](https://cdnweb.devolutions.net/docs/DVLS4220_2025_2.png)

{% hint style="success" %}
Pour s'assurer qu'un script d'action retourne de l'information au fournisseur PAM personnalisé, il est conseillé de **ne pas** utiliser `Write-Verbose`, `Write-Information` ou `Write-Host`.
{% endhint %}

### Détection de compte

{% embed url="<https://youtu.be/IIx5xQ2iohE?t=142>" %}

La première action exécutée par un fournisseur PAM personnalisé est l'action de détection de compte, qui énumère les comptes sur un fournisseur d'identité et remplit la base de données de Devolutions Server pour la gestion subséquente.

* **Paramètres d'entrée requis**

  Le script d'action de détection de compte est relativement simple, puisqu'il nécessite principalement les paramètres de script communs du terminal. Aucun paramètre additionnel n'est nécessaire, à moins que le fournisseur d'identité spécifique ne l'exige.
* **Sortie requise**

  Chaque script d'action de détection de compte doit retourner un ou plusieurs objets de type `PSCustomObject`, chaque objet représentant un compte individuel et contenant trois propriétés : `id`, `username` et `secret`.

  * La propriété `id` doit servir d'identifiant unique pour chaque compte. Bien que cet identifiant soit généralement un nom d'utilisateur, il peut s'agir de n'importe quel identifiant unique pour le compte.
  * La propriété `username` doit servir d'étiquette pour chaque compte. Cette étiquette est généralement un nom d'utilisateur, mais il peut s'agir de tout identifiant représentant le compte.
  * La propriété `secret` est l'identifiant du mot de passe. Elle peut prendre la forme d'une chaîne chiffrée ou d'un mot de passe en texte en clair, qui est ensuite utilisé pour la comparaison avec d'autres secrets via l'action de battement de coeur.

  Si le code du fournisseur d'identité ne retourne pas nativement cet objet avec les propriétés spécifiées, il est nécessaire de le convertir en créant un `PSCustomObject`. Voici un exemple de la façon d'y parvenir.

  ```powershell
  ## Some code that returns an object for each account.
  $accounts = Get-AccountFromIdentityProvider

  ## Create custom fields for Select-Object to return the id and username properties instead of name, and name
  $selectProps = @(
      @{'n'='id';e={$_.name}} ## "convert" the name property from the account to id
      @{'n'='username';e={$_.name}} ## "convert" the name property from the account to username
      @{'n'='secret';e={$_.password_hash}} ## "convert" the password_hash property from the account to secret
  )

  ## Pass each account to Select-Object to return the property names.
  $accounts | Select-Object -Property $selectProps
  ```

  Lors de la création d'un modèle de fournisseur PAM personnalisé et de son test (instructions fournies ci-dessous) avec une [configuration de détection de compte](/pam/fr/pam-with-devolutions-server/account-discovery-configurations.md), les champs ***Nom d'utilisateur*** et ***Identifiant unique*** sont remplis avec les valeurs des propriétés `username` et `id` provenant du script d'action.

![](https://cdnweb.devolutions.net/docs/ab_how-to-articles-create-anyidentity-action-scripts_8-8.png)

### Battement de coeur

{% embed url="<https://youtu.be/IIx5xQ2iohE?t=374>" %}

Après la récupération de tous les comptes du fournisseur d'identité par l'action de détection de compte, une action de battement de coeur est lancée. Celle-ci lit la valeur actuelle du mot de passe d'un compte et la compare à la valeur stockée par PAM. Si les deux valeurs diffèrent, un changement est détecté.

* **Paramètres d'entrée requis**

  En plus des paramètres communs du terminal, un script d'action de battement de coeur doit inclure au moins deux paramètres : `username` et `secret`, qui sont respectivement de type `string` et `securestring`.
* **Sortie requise**

  Un script d'action de battement de coeur retourne un seul objet booléen (`$true` ou `$false`) pour indiquer si la valeur actuelle du mot de passe d'un compte correspond à la valeur connue des modules PAM.

Voici un exemple de script d'action de battement de coeur.

```powershell
[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [string]$IdentityProviderEndpoint,

    [Parameter(Mandatory)]
    [string]$IdentityProviderEndpointUserName,

    [Parameter(Mandatory)]
    [securestring]$IdentityProviderEndpointPassword,

    [Parameter(Mandatory)]
    [string]$UserName,

    [Parameter(Mandatory)]
    [securestring]$Secret
)

## Code to query for a single user account here. Let's say it is $account.

## Convert the password to a secure string.
$secPw = $account.password | ConvertTo-SecureString -AsPlainText -Force

## Compare the results.
$secPw -eq $Secret
```

### Rotation des mots de passe

{% embed url="<https://youtu.be/IIx5xQ2iohE?t=488>" %}

Lorsque les fournisseurs PAM personnalisés exécutent l'action de battement de coeur et que le script d'action retourne une valeur `$false`, indiquant que le nouveau mot de passe diffère du mot de passe sur le fournisseur d'identité, l'action de rotation des mots de passe est déclenchée.

Cette action est responsable de synchroniser les mots de passe générés par le module PAM avec le fournisseur d'identité.

* **Paramètres d'entrée requis**

  En plus des paramètres communs du terminal, un script d'action de rotation des mots de passe doit inclure un paramètre : `NewPassword`. Il s'agit d'un paramètre `securestring` qui permet aux fournisseurs PAM personnalisés de transmettre la valeur du nouveau mot de passe au script d'action.
* **Sortie requise**

  Le script de rotation des mots de passe ne devrait retourner une valeur booléenne `$true` que si le changement de mot de passe réussit.

Voici un exemple de base d'un script d'action de rotation des mots de passe.

```powershell
[CmdletBinding()]
param(
    [Parameter(Mandatory)]
    [string]$IdentityProviderEndpoint,

    [Parameter(Mandatory)]
    [string]$IdentityProviderEndpointUserName,

    [Parameter(Mandatory)]
    [securestring]$IdentityProviderEndpointPassword,

    [Parameter(Mandatory)]
    [securestring]$NewPassword
)

## $result = Dowhatevertochangethepasword
if ($Result) {
    $True
} else {
    Write-Error "Failed to update secret."
}
```


---

# 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/pam/fr/knowledge-base/knowledge-base-articles/custom-pam-provider-action-scripts-in-devolutions-server.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.
