GLPI : comment utiliser l’API avec un script PowerShell ? Voici un exemple pratique !
Sommaire
I. Présentation
Dans ce tutoriel, nous allons découvrir l’API de GLPI et voir comment nous pouvons utiliser cette API avec un script PowerShell. Grâce à l’API, vous pouvez lire et écrire des données dans GLPI, ce qui ouvre la voie à différents cas d’usage et des intégrations avec des applications tierces…
Il y a quelques années, j’ai créé un script PowerShell permettant d’inscrire l’ID de connexion AnyDesk des ordinateurs Windows directement dans l’inventaire GLPI. Ainsi, sur GLPI, dans chaque fiche d’ordinateur, il y avait l’ID AnyDesk en tant qu’information supplémentaire (celle-ci n’étant pas remontée automatiquement).
Dans le cadre de ce tutoriel, nous verrons un autre scénario d’utilisation : pousser la valeur de l’attribut des objets ordinateurs de l’Active Directory vers les ordinateurs présents dans GLPI. Nous ciblerons le champ “Usager numéro” sur l’interface de GLPI, mais nous pourrions choisir un autre champ. Je n’ai volontairement pas spécifié le champ “Usager” car il est alimenté automatiquement par l’agent en fonction du dernier utilisateur connecté.
Le champ “description” de l’AD étant fréquemment utilisé pour saisir des informations additionnelles sur un PC, comme le nom de l’utilisateur à qui il est attribué, j’ai trouvé l’idée pertinente. L’idée de cet article étant aussi de vous montrer la mécanique et vous permettre d’adapter le code à vos besoins.
Voici un aperçu du résultat obtenu grâce à ce script PowerShell :

Parmi les actions possibles au travers de l’API de GLPI :
- Rechercher des éléments
- Mettre à jour, ajouter ou supprimer des éléments
- Obtenir la configuration de GLPI
- Demander la réinitialisation d’un mot de passe
- Etc…
Si vous avez besoin d’aide pour installer GLPI ou déployer l’agent GLPI, voici nos tutoriels :
- GLPI : comment déployer l’agent GLPI sur les machines Windows à l’aide d’une GPO ?
- Installation pas-à-pas de GLPI sur Debian
II. Configurer l’API de GLPI
Nous devons commencer par activer et configurer l’API REST de GLPI, sinon les connexions seront refusées. Il sera également nécessaire de générer un jeton d’application et un jeton au niveau d’un utilisateur (qui sera utilisé pour agir auprès de GLPI).
À partir de l’interface de GLPI, cliquez sur : Configuration, Générale, API. Ensuite, basculez l’option “Activer l’API Rest” sur “Oui“, puis sauvegardez avec le bouton prévu à cet effet.

Profitez-en pour récupérer l’URL d’accès à l’API, qui est l’endpoint sur lequel il faudra se connecter. Pour ma part, il s’agit de cette URL :
Toujours sur cette même page, cliquez sur le bouton “Ajouter un client de l’API“. Configurez ce nouveau client en indiquant un nom, par exemple “Script_PowerShell” et vous pouvez aussi filtrer les accès à l’API. Dans l’exemple ci-dessous, seule la machine ayant l’adresse IP pourra solliciter l’API. Cochez l’option “Regénérer” et cliquez sur “Ajouter“.

Copiez le jeton qui a été généré. Il s’agit de votre jeton d’application et il sera nécessaire de l’associer au paramètre lors des échanges avec l’API.

Sur le même principe, vous devez générer une clé d’API pour l’utilisateur que vous allez utiliser pour contacter l’API. Suivez le chemin suivant : Administration, Utilisateurs, choisissez votre utilisateur, puis dans l’onglet “Utilisateur“, regénérez un jeton d’API. Copiez la valeur obtenue.

Voilà, la configuration est terminée.
III. Se connecter à l’API GLPI avec PowerShell
Que ce soit avec PowerShell, un autre langage ou un outil comme Curl, cela n’a pas d’importance. Ce qui est essentiel, c’est de construire les requêtes dans le format attendu par l’API de GLPI.
La première action à effectuer, c’est d’initier une session auprès de l’API, en utilisant les jetons d’application et d’utilisateur. Pour cela, vous devez cibler le point de terminaison à l’aide de la commande PowerShell . Si la connexion réussie, un jeton de session sera retourné dans la console.
Après, d’autres appels sont possibles vers l’API pour récupérer des informations ou effectuer des écritures.
- Rechercher un ordinateur dans GLPI dont le nom correspond à la variable
- Cibler un ordinateur dans GLPI pour actualiser ses informations ( étant l’identifiant récupéré via la requête précédente)
Le mieux étant de consulter la documentation de l’API. Elle est accessible directement via l’adresse du point de terminaison de votre serveur. Par exemple, pour ma part, c’est à cette adresse :
IV. Synchroniser la description des machines Active Directory avec GLPI
Ce script récupère une liste d’ordinateurs dans Active Directory et met à jour leurs descriptions dans GLPI en utilisant l’API REST de l’application. Ici, nous prenons en considération toutes les machines situées dans l’OU suivante (et sous-OU éventuelles) : . Il est important de comprendre qu’il s’agit d’un push de l’AD vers GLPI, et non une synchronisation bidirectionnelle.
Pour éviter les appels inutiles vers l’API, seules les machines dont la description n’est pas vide dans l’AD seront synchronisées avec GLPI. La valeur dans GLPI est directement écrasée, nous ne cherchons pas à faire une comparaison, car cela ferait des requêtes API supplémentaires (et ce n’est pas forcément justifié sur du push). De plus, il est intéressant de noter que le script se termine par un appel sur pour tuer la session vers l’API GLPI.
Note : le paramètre -SkipCertificateCheck spécifié avec Invoke-WebRequest sert à outrepasser la vérification du certificat. Ceci est utile, car dans mon lab, j’utilise un certificat auto-signé. Attention, ce paramètre n’est pas pris en charge par Windows PowerShell 5.1 : supprimez-le si besoin ou installez la bonne version de PowerShell.
Voici un exemple de sortie lorsqu’il n’y a qu’un seul ordinateur à synchroniser.

En complément, je vous remets le résultat obtenu (déjà présenté en début d’article) :

Libre à vous de réadapter cet extrait de code pour pousser d’autres informations vers GLPI, en fonction de vos besoins. Disons que l’API fait sauter certaines limites natives lorsque l’on a besoin d’une information, mais qu’elle n’est pas remontée nativement.
V. Conclusion
En suivant ce tutoriel, vous devriez être en mesure de solliciter l’API de GLPI à l’aide d’un script PowerShell ! Vous pouvez aussi seulement utiliser la première partie de l’article dédiée à la configuration si vous désirez utiliser un autre langage ou plutôt utiliser une intégration avec une application tierce.
Qu’en pensez-vous ?