Automatiser GLPI avec PowerShell : Guide Complet (avec Scripts)
Introduction
GLPI (Gestionnaire Libre de Parc Informatique) est un outil ITSM très populaire dans les entreprises pour gérer le parc informatique, les tickets, et bien plus. Grâce à son API REST, il est possible d’interagir automatiquement avec GLPI depuis d’autres systèmes, comme PowerShell.
Dans ce guide, vous apprendrez à automatiser des tâches simples avec GLPI et PowerShell. Chaque exemple est expliqué pas à pas, avec les scripts complets.
Prérequis
Avant de commencer :
- GLPI configuré avec l’API activée
- Un App Token et un User Token (générés dans GLPI)
- PowerShell installé (Windows 10+ ou Windows Server)
- Si besoin, le module
ActiveDirectory
si vous utilisez l’AD
1. Initialiser la connexion à l’API GLPI
Avant chaque script, il faut créer une session d’API pour s’authentifier.
# Configuration
$AppToken = "VOTRE_APP_TOKEN"
$UserToken = "VOTRE_USER_TOKEN"
$AppURL = "https://votre-glpi.fr/apirest.php"
# Headers d'authentification
$Headers = @{
"App-Token" = $AppToken
"Authorization" = "user_token $UserToken"
}
# Initier la session
$InitSession = Invoke-RestMethod -Uri "$AppURL/initSession" -Method GET -Headers $Headers
$SessionToken = $InitSession.session_token
# Ajouter le token de session aux entêtes
$Headers["Session-Token"] = $SessionToken
2. Synchroniser la description des ordinateurs depuis Active Directory
Objectif :
Mettre à jour la fiche des ordinateurs GLPI avec la description présente dans Active Directory.
Script :
Import-Module ActiveDirectory
# Lister les ordinateurs AD
$Computers = Get-ADComputer -Filter * -Property Name, Description
foreach ($Computer in $Computers) {
$GLPIName = $Computer.Name
$Description = $Computer.Description
# Chercher la machine dans GLPI
$Search = Invoke-RestMethod -Uri "$AppURL/Computer/?searchText=$GLPIName" -Method GET -Headers $Headers
if ($Search.Count -gt 0) {
$ComputerID = $Search[0].id
# Mise à jour de la description
$UpdateData = @{
input = @{
id = $ComputerID
comment = $Description
}
} | ConvertTo-Json -Depth 3
Invoke-RestMethod -Uri "$AppURL/Computer/$ComputerID" -Method PUT -Headers $Headers -Body $UpdateData -ContentType "application/json"
Write-Host "Mise à jour : $GLPIName"
}
}
3. Créer un ticket automatiquement depuis un outil de supervision
Objectif :
Créer un ticket GLPI automatiquement dès qu’une alerte est détectée.
Script :
# === Données venant de la supervision ===
$NomServeur = "SRV-01"
$TagClient = "ClientX" # Le tag/nom de l'entité GLPI
$RequestTypeID = 5 # ID du type de demande 'Supervision' dans GLPI
# === Récupérer l'ID de l'entité GLPI en fonction du nom ===
$EntitySearch = Invoke-RestMethod -Uri "$AppURL/Entity?searchText=$TagClient" -Method GET -Headers $Headers
if ($EntitySearch.Count -eq 0) {
Write-Error "Entité '$TagClient' introuvable dans GLPI."
exit
}
$EntityID = $EntitySearch[0].id # On prend le premier résultat correspondant
# === Création du ticket dans l'entité trouvée avec source Supervision ===
$TicketData = @{
input = @{
name = "Alerte serveur - $NomServeur"
content = "Le serveur $NomServeur a déclenché une alerte critique. (Client : $TagClient)"
urgency = 3
impact = 2
priority = 4
status = 1
type = 1
requesttypes_id = $RequestTypeID # Source : Supervision
entities_id = $EntityID
}
} | ConvertTo-Json -Depth 3
Invoke-RestMethod -Uri "$AppURL/Ticket" -Method POST -Headers $Headers -Body $TicketData -ContentType "application/json"
# === Fermer la session ===
Invoke-RestMethod -Uri "$AppURL/killSession" -Method GET -Headers $Headers
4. Lister les tickets ouverts d’un utilisateur
Objectif :
Afficher tous les tickets non résolus d’un utilisateur précis.
Script :
$UserID = 123 # Remplacez par l'ID utilisateur GLPI
$Response = Invoke-RestMethod -Uri "$AppURL/Ticket?criteria[0][field]=users_id_recipient&criteria[0][value]=$UserID&criteria[1][link]=AND&criteria[1][field]=status&criteria[1][searchtype]=notcontains&criteria[1][value]=closed" -Method GET -Headers $Headers
foreach ($Ticket in $Response) {
Write-Host "Ticket: $($Ticket.id) - $($Ticket.name)"
}
5. Affecter automatiquement un ticket à un technicien selon la catégorie
Objectif :
Affecter le ticket à la bonne personne selon son type.
Script :
$TicketID = 456 # ID du ticket
$TechnicianID = 78 # ID GLPI du technicien
$AssignData = @{
input = @{
id = $TicketID
users_id_assign = $TechnicianID
}
} | ConvertTo-Json -Depth 3
Invoke-RestMethod -Uri "$AppURL/Ticket/$TicketID" -Method PUT -Headers $Headers -Body $AssignData -ContentType "application/json"
6. Créer une fiche ordinateur automatiquement via un script
Objectif :
Ajouter une nouvelle fiche ordinateur dans GLPI quand une nouvelle machine est déployée.
Script :
$NomMachine = "PC-NEW01"
$SerialNumber = "SN12345678"
$ComputerData = @{
input = @{
name = $NomMachine
serial = $SerialNumber
comment = "Ajout automatique via PowerShell"
entities_id = 0
}
} | ConvertTo-Json -Depth 3
Invoke-RestMethod -Uri "$AppURL/Computer" -Method POST -Headers $Headers -Body $ComputerData -ContentType "application/json"
7. Fermer la session GLPI
Toujours penser à fermer proprement la session à la fin d’un script :
Invoke-RestMethod -Uri "$AppURL/killSession" -Method GET -Headers $Headers
Conclusion
Avec ces exemples simples, vous avez toutes les bases pour automatiser GLPI avec PowerShell. Vous pouvez aller plus loin en ajoutant :
- Des logs d’exécution
- Des interfaces Web internes
- Des automatisations planifiées
N’hésitez pas à adapter ces scripts à vos besoins réels. C’est un excellent point de départ pour industrialiser vos opérations IT.