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

# IIS

Hébergez PowerShell Universal dans IIS en configurant le pool d'applications, les liaisons du site Web, les paramètres web.config et l'authentification Windows pour les tâches.

## Hébergement dans IIS

PowerShell Universal prend en charge l'hébergement dans IIS (Internet Information Services (IIS) pour Windows® Server). Veuillez noter qu'une série de prérequis pour l'hôte et des étapes de configuration spécifiques sont nécessaires pour permettre l'exécution de PowerShell Universal sur IIS. Veuillez examiner chaque section attentivement, car IIS exige de nombreux paramètres de configuration spécifiques pour fonctionner avec les applications .NET Core modernes telles que PowerShell Universal.

## Étape 1 : Préparation de l'hôte IIS

Les composants suivants sont requis pour héberger PowerShell Universal sur IIS.

* [Internet Information Services (IIS) version 10.0](https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-10-version-1709/new-features-introduced-in-iis-10-1709)
  * Y compris : protocole WebSocket
* [ASP.NET Core Hosting Bundle 10.0](https://dotnet.microsoft.com/en-us/download/dotnet/9.0)

Les fonctionnalités IIS de Windows Server suivantes doivent également être activées sur l'hôte IIS :

| Nom d'affichage de la fonctionnalité | Exigence                                        | Script d'installation                     |
| ------------------------------------ | ----------------------------------------------- | ----------------------------------------- |
| Protocole WebSocket                  | Requis pour exécuter PowerShell Universal       | `Install-WindowsFeature Web-WebSockets`   |
| Authentification Windows             | Requis pour utiliser l'authentification Windows | `Install-WindowsFeature Web-Windows-Auth` |

Assurez-vous d'abord d'activer la fonctionnalité IIS sur Windows Server, puis installez le bundle d'hébergement ASP.NET Core.

**NOTE** : IIS nécessite souvent un redémarrage de l'hôte après l'installation du bundle d'hébergement .NET Core! Il est fortement recommandé de REDÉMARRER l'hôte IIS après l'installation du bundle d'hébergement .NET Core.

Une fois ces prérequis remplis, vous êtes prêt à commencer la configuration de PowerShell Universal sur IIS.

{% hint style="warning" %}
L'activation de la fonctionnalité de publication WebDav d'IIS causera des problèmes avec Universal. La publication WebDav filtre les requêtes HTTP et empêche par défaut les verbes PUT et DELETE. Si la publication WebDav est activée, veuillez vous assurer qu'elle est configurée correctement pour autoriser ces verbes.
{% endhint %}

## Étape 2 : Télécharger PowerShell Universal

Téléchargez la dernière copie de PowerShell Universal. Vous devrez télécharger la version archive **ZIP** de PowerShell Universal. Cette archive est spécialement conçue pour ceux qui souhaitent configurer PowerShell Universal pour IIS ou d'autres serveurs Web tiers. Extrayez le contenu du fichier Zip à l'emplacement du dossier de l'hôte Web prévu sur votre hôte IIS.

Vous devez vous assurer que les fichiers de l'application PowerShell Universal sont débloqués après leur extraction. Vous pouvez les débloquer avec l'applet de commande `Unblock-File`.

```
Get-ChildItem C:\inetpub\wwwroot -Recurse | Unblock-File
```

{% hint style="warning" %}
Cet emplacement est très important et sera référencé tout au long de ce document. Plus important encore, cet emplacement doit être accessible par l'identité utilisée par le pool d'applications IIS.
{% endhint %}

## Étape 3 : Configuration du pool d'applications IIS

Maintenant que notre hôte est prêt et que nous avons téléchargé PowerShell Universal, nous pouvons commencer à configurer IIS.

La première étape du processus de configuration d'IIS consiste à créer un nouveau pool d'applications dans IIS. Avant de commencer la configuration, nous devrions nous assurer de sélectionner une identité valide pour le pool d'applications IIS.

### 3.1 : Choisir une identité de pool d'applications

L'identité du pool d'applications est cruciale pour PowerShell Universal, car il s'agira de l'« utilisateur par défaut » sous lequel les tâches et les applis (anciennement appelées tableaux de bord) s'exécuteront. Ce sera également l'utilisateur qui effectuera les opérations de lecture/écriture dans la base de données Universal Automation et qui sera utilisé par IIS pour lire le répertoire de contenu Web et exécuter l'application.

Il est suggéré d'utiliser « **LocalSystem »** ou un **compte de service** de votre choix.

En raison des limitations d'IIS, les paramètres d'identité du pool d'applications ont des conséquences **MAJEURES** sur le comportement des options « **Run As** » lors de l'utilisation d'Universal Automation.

{% hint style="danger" %}
**Limitations d'IIS avec Universal Automation**

* **Service d'application configuré comme Local System** - Les scripts s'exécuteront par défaut avec le compte System et un *compte « Run as » **PEUT*** être spécifié lors de l'exécution d'un script dans Universal Automation
* **Service d'application configuré comme compte de service** - Les scripts peuvent **SEULEMENT** être exécutés avec le compte de service et un **\*\******compte « Run as »*** \_\*\*\_NE PEUT PAS\*\* être spécifié lors de l'exécution des scripts.
  {% endhint %}

**Exigences relatives à l'identité du compte de service**

* [ ] Accès complet en lecture/écriture au dossier de l'application PowerShell Universal que nous avons extrait à l'**étape 2**
* [ ] Accès complet en lecture/écriture à la base de données PowerShell Universal : Par défaut : *C:\ProgramData\Universal Automation*
* [ ] Droits *Ouvrir une session en tant que tâche de lot* (p. ex. depuis secpol.msc > Stratégies locales > Attribution des droits utilisateur

{% hint style="info" %}
L'emplacement par défaut de la base de données peut être personnalisé via le fichier `appsettings.json` de PowerShell Universal si désiré.
{% endhint %}

Une fois que nous avons sélectionné une identité valide, nous sommes prêts à créer le pool d'applications dans IIS.

### 3.2 : Création du nouveau pool d'applications IIS

Maintenant que nous avons choisi une identité de pool d'applications ayant un accès en lecture/écriture aux dossiers de l'application et de la base de données PowerShell Universal, nous pouvons créer le pool d'applications dans IIS.

* Dans le gestionnaire IIS, choisissez l'option **Ajouter un pool d'applications...**
  * **Nom :** Utilisez le nom de votre choix pour le pool d'applications
  * **Version .NET CLR** : Code non managé
  * Cliquez sur **OK** pour créer le pool d'applications.

### 3.3 : Configurer les « Paramètres avancés » du pool d'applications IIS

Maintenant que le pool d'applications a été créé, nous devrons configurer les **Paramètres avancés**

* Ouvrez les « **Paramètres avancés »** du pool d'applications et appliquez les configurations suivantes :
  * **Général / Activer les applications 32 bits** : False
  * **Modèle de processus / Identité** : Utilisez l'identité que nous avons sélectionnée pour notre pool d'applications dans la section « Choisir une identité de pool d'applications » ci-dessus.
  * **Modèle de processus / Charger le profil utilisateur** : True

Une fois les paramètres avancés appliqués, notre pool d'applications est prêt; notre prochaine étape sera de configurer le site Web IIS qui utilisera ce pool d'applications.

## Étape 4 : Configuration du site Web IIS

### 4.1 : Préparation du web.config pour notre site Web

Maintenant que nous avons un pool d'applications valide, nous devons créer un site Web IIS pour exposer l'application. Avant de le faire, nous voudrons examiner le fichier `web.config` de PowerShell Universal pour notre site Web. Dans le dossier extrait de l'application PowerShell Universal, nous trouverons un fichier web.config. Ce fichier de configuration a été spécialement conçu pour IIS et comporte un certain nombre de configurations que nous devons examiner avant de créer le site Web IIS.

Plus important encore, nous devrons mettre à jour la valeur de l'argument « **processPath** » de ce fichier de configuration. Cette valeur fournira à IIS le chemin exact du binaire de l'application afin qu'il puisse lancer correctement l'application.

* Ouvrez le fichier web.config dans le dossier de l'application PowerShell Universal
  * Repérez la section **\<aspNetCore** **processPath** du fichier de configuration
  * Remplacez l'argument processPath « .\Universal.Server.exe » par l'emplacement exact du chemin de Universal.Server.exe (voir la figure ci-dessous pour un exemple)
  * Enregistrez le fichier pour appliquer la configuration

```markup
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="C:\Program Files (x86)\Universal\Universal.Server.exe" arguments="" forwardWindowsAuthToken="false" stdoutLogEnabled="true" stdoutLogFile=".\logs\log" hostingModel="InProcess"/>
  </system.webServer>
</configuration>
```

{% hint style="info" %}
Il existe une variété de configurations supplémentaires dans ce fichier. Nous les examinerons plus en détail dans la section « Configuration avancée », mais vous pouvez consulter les « **Configurations web.config supplémentaires** » sur cette page pour plus de détails
{% endhint %}

### 4.2 : Création du site Web IIS pour IIS

Maintenant qu'un pool d'applications a été créé pour PowerShell Universal avec une identité valide et que nous avons configuré le fichier web.config, nous sommes enfin prêts à créer le site Web IIS. Le composant Site Web d'IIS charge les artéfacts de l'application et expose l'application sur le terminal Web configuré.

1. Dans le gestionnaire IIS : cliquez sur « Ajouter un site Web.. »
2. Configurez les options du nouveau site Web :
   * **Nom du site** : Utilisez le nom de votre choix, ex. : `PowerShell Universal.`
   * **Pool d'applications** : **N'UTILISEZ PAS** le *DefaultAppPool* - **Sélectionnez** le pool d'applications que nous avons créé à l'étape précédente.
   * **Chemin d'accès physique** : Il doit s'agir du chemin physique vers le contenu PowerShell Universal que nous avons extrait de notre fichier .zip téléchargé. **NOTE** : L'identité du pool d'applications doit avoir accès à cet emplacement.
   * **Paramètres de liaison** : Notez que pour la configuration initiale, il est suggéré d'utiliser les valeurs par défaut de base; nous les mettrons à jour plus tard dans notre configuration avancée
     * Type http - Pour la configuration initiale
     * Adresse IP : Toutes non attribuées
     * Port : 80
     * Nom d'hôte : Nom de l'hôte

## Étape 5 : Démarrage du site Web

À ce stade, toutes les configurations requises devraient être en place et le site Web IIS hébergeant PowerShell Universal devrait être opérationnel. Avec un navigateur Web, accédez à l'emplacement du site Web configuré pour valider que PowerShell Universal a démarré. À partir de là, vous pouvez suivre le guide « Prise en main » pour valider les fonctionnalités de base. Une fois que vous êtes certain que l'application fonctionne correctement avec une configuration IIS de base, vous pouvez passer à la « Configuration avancée » pour sécuriser et finaliser la configuration IIS souhaitée.

{% hint style="info" %}
Si vous éprouvez encore des problèmes avec la configuration IIS de base, essayez de vérifier le chemin « Logs » spécifié dans le web.config pour les problèmes courants. Si les problèmes persistent, communiquez avec les forums ou le soutien pour obtenir de l'aide.
{% endhint %}

## Applications IIS imbriquées

Il est possible d'imbriquer plusieurs instances de PowerShell Universal sous un seul pool d'applications et un seul site Web, mais cela nécessite une configuration supplémentaire.

Vous aurez besoin de deux dossiers pour les fichiers de votre application : un pour chaque application. Vous devrez également configurer deux dossiers de données : un pour chaque application.

Une fois la structure de vos dossiers configurée, vous devrez créer deux fichiers appsettings.json et mettre à jour vos fichiers web.config pour chaque application.

Dans les fichiers appsettings.json, vous devrez définir les chemins appropriés vers les fichiers de données de chaque instance. Vous devrez également configurer l'URL de base correcte pour le site imbriqué.

```json
{
  "Kestrel": {
    "BasePath": "/psu1"
  },
  "Logging": {
    "Path": "C:\\src\\psu\\data1\\log.txt",
  },
  "Data": {
    "RepositoryPath": "C:\\src\\psu\\data1\\Repository",
    "ConnectionString": "filename=C:\\src\\psu\\data1\\database.db;upgrade=true",
  }
}
```

Ensuite, vous devrez mettre à jour les fichiers web.config de chaque site pour utiliser le bon fichier appsettings.json et utiliser l'hébergement OutOfProcess.

```markup
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\Universal.Server.exe" arguments="--appsettings C:\src\psu\appsettings.psu1.json" forwardWindowsAuthToken="false" stdoutLogEnabled="true" stdoutLogFile=".\logs\log" hostingModel="OutOfProcess" />
  </system.webServer>
</configuration>
<!--ProjectGuid: 588ACF2E-9AE5-4DF1-BC42-BCE16A4C4EDE-->
```

Maintenant, dans le gestionnaire IIS, faites un clic droit sur les dossiers psu1 et psu2 pour les convertir en applications.

Vous devriez maintenant pouvoir accéder à la console d'administration de PowerShell Universal aux deux URL suivantes.

```
http://localhost/psu1/admin
http://localhost/psu2/admin
```

## Configuration pour les tâches

{% hint style="warning" %}
Des paramètres de pool d'applications mal configurés peuvent empêcher l'exécution des tâches. La cause principale est le recyclage du pool d'applications ou un échec du démarrage de l'application Web au démarrage du serveur. Ce n'est pas un problème pour des fonctionnalités comme les API ou les applis (anciennement appelées tableaux de bord), mais en raison du traitement en arrière-plan des tâches, vous devrez vous assurer que le serveur démarre le site Web et le garde en cours d'exécution. Vous pouvez [en apprendre davantage ici](https://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html#making-asp-net-core-application-always-running-on-iis).
{% endhint %}

Si vous prévoyez exécuter des tâches planifiées dans votre instance PowerShell Universal hébergée dans IIS, vous devez vous assurer de configurer IIS de façon appropriée. Il y a plusieurs paramètres à valider lors de la configuration de votre pool d'applications.

### Initialisation de l'application

Installez la fonctionnalité Initialisation de l'application du rôle de serveur Web.

### Paramètres du pool d'applications

Vous voudrez configurer les paramètres suivants :

* **Général** : version .NET CLR = [Code non managé](https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/advanced?view=aspnetcore-7.0#sub-applications).
* **Général** : Mode de démarrage = AlwaysRunning
* **Modèle de processus** : paramètre Délai d'inactivité = 0 (désactivé)
* **Recyclage** : Intervalle de temps régulier = 0.

### Paramètres du site Web

Dans le site IIS qui héberge Universal, vous devrez vous assurer que Preload est activé.

### Variables d'environnement

Bien que nous tentions de détecter que PSU s'exécute dans IIS, vous pourriez rencontrer des problèmes avec l'activation du gestionnaire d'authentification negotiate lorsqu'il n'est pas pris en charge dans IIS. Pour vous assurer que ce ne soit pas un problème, vous pouvez le désactiver complètement en créant la variable d'environnement ci-dessous sur votre machine IIS.

```powershell
$Env:PSU_DISABLE_WIN_AUTH = true
```

### Débogage des problèmes avec IIS et les tâches

Si vous avez encore des problèmes avec IIS et les tâches, vous devriez envisager d'activer la[ journalisation du recyclage IIS](https://blogs.iis.net/ganekar/iis-7-0-application-pool-recycles-log-a-event-in-windows-event-log) pour vous assurer qu'IIS garde votre site en cours d'exécution.

Depuis PowerShell Universal 3.3, vous pouvez (via la durée de fonctionnement du système sur la page d'accueil de la console d'administration) obtenir un bon indicateur du dernier démarrage du service.

Avant la version 3.3, vous pouvez consulter la durée de fonctionnement du serveur en visitant le tableau de bord [Hangfire](/powershell-universal/fr/developpement/hangfire.md) et en cliquant sur l'onglet Serveurs.

## Authentification

PowerShell Universal peut utiliser l'authentification anonyme et l'authentification Windows dans IIS.

### Authentification Windows

Pour activer l'authentification Windows, vous devrez d'abord l'activer pour votre serveur Web, puis pour votre site Web. Vous trouverez les paramètres d'authentification sous la section Authentification dans le gestionnaire IIS.

Pour le site Web, définissez les mêmes paramètres.

Une fois l'authentification activée dans IIS, vous devrez vous assurer que l'authentification Windows est activée pour PowerShell Universal.

D'abord, ajustez le fichier `web.config` pour transférer le jeton d'authentification Windows.

```markup
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\Universal.Server.exe" arguments="" forwardWindowsAuthToken="true" stdoutLogEnabled="true" stdoutLogFile=".\logs\log" hostingModel="OutOfProcess" />
  </system.webServer>
</configuration>
<!--ProjectGuid: 588ACF2E-9AE5-4DF1-BC42-BCE16A4C4EDE-->
```

Ensuite, activez l'authentification Windows dans le fichier `appsettings.json` de PowerShell Universal.

```javascript
    "Authentication" : {
    "Windows": {
      "Enabled": "true"
    },
  }
```

Redémarrez votre pool d'applications et vous devriez maintenant pouvoir vous connecter avec des identifiants Windows.

{% hint style="warning" %}
Lorsque vous activez l'authentification Windows mais pas l'authentification anonyme, vous ne pourrez plus utiliser les AppTokens de PowerShell Universal. Vous devrez activer les deux méthodes d'authentification pour prendre en charge à la fois les identifiants Windows et les jetons d'application.
{% endhint %}

### Authentification anonyme

L'authentification anonyme peut être activée pour permettre la transmission des jetons d'application et d'autres requêtes à travers le proxy IIS. Vous devrez activer l'authentification anonyme aux niveaux du serveur et du site Web. Il n'y a aucune configuration supplémentaire à faire dans PowerShell Universal.

## Configurations web.config supplémentaires

Les paramètres du web.config de Universal peuvent être ajustés selon vos besoins. Vous trouverez ci-dessous une description de chaque paramètre.

### ForwardWindowsAuthToken

Ce paramètre est utilisé pour l'authentification Windows. Si vous souhaitez utiliser l'authentification Windows avec IIS, assurez-vous de désactiver l'authentification anonyme et d'activer l'authentification Windows dans votre site IIS, puis définissez ce paramètre à true.

### StdoutLogEnabled et StdoutLogFile

Ce paramètre est utilisé pour déboguer les problèmes de démarrage de votre installation de Universal. Il est recommandé de l'activer lors de la configuration initiale de l'intégration IIS. Vous pouvez le désactiver une fois que tout est configuré. Vous devez vous assurer que l'identité de votre AppPool a un accès en écriture à l'emplacement de StdOutLogFile.

### HostingModel

Le modèle d'hébergement détermine la façon dont le serveur Universal fonctionnera. Lorsqu'il est défini à InProcess, le serveur Universal s'exécutera à partir de l'agent IIS. Cela offre une meilleure performance que l'hébergement OutOfProcess. L'hébergement InProcess ne fonctionne pas avec StdOutLogEnabled. Il est recommandé d'utiliser l'hébergement OutOfProcess seulement pendant la configuration de Universal, et InProcess lorsque vos étapes de configuration sont terminées.

## Mise à niveau

Lors d'une mise à niveau, assurez-vous de ne pas copier (écraser) des fichiers par-dessus votre installation existante. Au lieu de cela, (à l'exception des fichiers web.config et \*.json) supprimez tous les fichiers d'application actuels et copiez les nouveaux dans le répertoire. **Copier par-dessus les fichiers d'application peut faire en sorte que des binaires inattendus soient présents dans le répertoire d'installation, ce qui peut causer des problèmes avec PowerShell Universal.**


---

# 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/config/hosting/hosting-iis.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.
