You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2020-10-03 20:30:44

mrvls
Member
Registered: 2020-10-03
Posts: 7

Search Ticket via PowerShell

Bonjour/bonsoir,

Nous avons besoin d'automatiser des actions AD basées sur un formulaire.
Je cherche donc à sélectionner les tickets créés par ce formulaire sur le critère du nom (et peut être d'autres critères!) via PowerShell.

Pour le moment j'ai réussi assez simplement trouver un ticket via son ID:

$SearchResult = Invoke-RestMethod "$AppURL/Ticket/21763/" -Headers @{"session-token"=$SessionToken.session_token; "App-Token" = "$AppToken"}

Mais, autant je suis très à l'aise sur PowerShell, autant j'ai beaucoup de mal avec JSON (?). je ne vois pas bien où ni comment insérer mes "criteria" pour filtrer sur le nom.

Où puis-je d'ailleurs obtenir la liste des "fields" et leur numéro respectif?

Offline

#2 2020-10-03 21:54:12

mrvls
Member
Registered: 2020-10-03
Posts: 7

Re: Search Ticket via PowerShell

Une petite pause et je trouve mes réponses !

"Où puis-je d'ailleurs obtenir la liste des "fields" et leur numéro respectif?":
doc: /apirest.php#list-searchoptions

$listSearchOptions = Invoke-RestMethod $AppURL/listSearchOptions/Ticket -Headers @{"session-token"=$SessionToken.session_token; "App-Token" = "$AppToken"}

"sélectionner les tickets créés par ce formulaire sur le critère du nom":

$request = Invoke-RestMethod -Uri "$($AppURL)/search/Ticket?criteria[0][field]=1&criteria[0][searchtype]=0&criteria[0][value]=$name" -Headers @{"session-token"=$SessionToken.session_token;"App-Token" = "$AppToken"} -Method Get

Offline

#3 2020-10-03 22:51:30

mrvls
Member
Registered: 2020-10-03
Posts: 7

Re: Search Ticket via PowerShell

Bon je suis bien avancé avec ma recherche qui fonctionne correctement, même avec plusieurs critères!

Mais comment récupérer le contenu du ticket ? La "description" ? J'aurais peut être dû commencer par là...


/edit: pour obtenir plus de détails il faut interroger une autre adresse qui requête directement un ticket...

Invoke-RestMethod -Uri "$($AppURL)/Ticket/21763" -Headers @{"session-token"=$SessionToken.session_token;"App-Token" = "$AppToken"} -Method Get

Last edited by mrvls (2020-10-04 10:30:50)

Offline

#4 2020-10-04 11:45:12

mrvls
Member
Registered: 2020-10-03
Posts: 7

Re: Search Ticket via PowerShell

Tant que j'y suis, pour finir, voici comment récupérer le contenu d'un formulaire (formcreator) en array:

$ticket = Invoke-RestMethod -Uri "$($AppURL)/Ticket/21763" -Headers @{"session-token"=$SessionToken.session_token;"App-Token" = "$AppToken"} -Method Get
$html = [System.Web.HttpUtility]::HtmlDecode($ticket.content)
$fakeXML = [xml]$html
$fakeXML.ChildNodes

Offline

#5 2020-10-07 01:16:08

mrvls
Member
Registered: 2020-10-03
Posts: 7

Re: Search Ticket via PowerShell

Maintenant que j'ai ma liste de ticket, les détails des tickets, je peux également changer le statut:

$json = '{"input": {"tickets_id": "21845","status": "5"}}'
Invoke-RestMethod -Uri "$($AppURL)/Ticket/21845" -Headers @{"session-token"=$SessionToken.session_token;"App-Token" = "$AppToken"; "ContentType" = "application/json"} -Method Put -Body $json
$json = '{"input": {"tickets_id": "21845","status": "6"}}'
Invoke-RestMethod -Uri "$($AppURL)/Ticket/21845" -Headers @{"session-token"=$SessionToken.session_token;"App-Token" = "$AppToken"; "ContentType" = "application/json"} -Method Put -Body $json

Par contre impossible d'ajouter un commentaire (que ce soit ItilFollowup ou TicketFollowup, nous sommes en 9.4.4) avec:

$json = '{"input": {"itemtype": "Ticket","items_id": "21845","users_id": "3774","content": "test"}}'
Invoke-RestMethod -Uri "$($AppURL)/Ticket/21845/ItilFollowup" -Headers @{"session-token"=$SessionToken.session_token;"App-Token" = "$AppToken"; "ContentType" = "application/json"} -Method Put -Body $json
Invoke-RestMethod -Uri "$($AppURL)/ItilFollowup" -Headers @{"session-token"=$SessionToken.session_token;"App-Token" = "$AppToken"; "ContentType" = "application/json"} -Method Put -Body $json

Le retour est systématique, sans réel message d'erreur:

Length         : 0
LongLength     : 0
Rank           : 1
SyncRoot       : {}
IsReadOnly     : False
IsFixedSize    : True
IsSynchronized : False
Count          : 0

J'arrive bien à lire le commentaire ajouté graphiquement (uniquement avec ItilFollowup):

Invoke-RestMethod -Uri "$($AppURL)/Ticket/21845/ItilFollowup" -Headers @{"session-token"=$SessionToken.session_token;"App-Token" = "$AppToken"; "ContentType" = "application/json"} -Method Get

id                : 16849
itemtype          : Ticket
items_id          : 21845
date              : 2020-10-06 17:35:37
users_id          : 3774
users_id_editor   : 0
content           : <p>testgui</p>
is_private        : 0
requesttypes_id   : 0
date_mod          : 2020-10-06 17:35:37
date_creation     : 2020-10-06 17:35:37
timeline_position : 1
sourceitems_id    : 0
sourceof_items_id : 0
links             : {[...]}

Le problème doit venir du Body mais je n'ai plus de pistes..

Je vois bien que je parle seul mais si quelqu'un a une idée.. smile

Offline

#6 2020-10-12 23:07:51

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 5,151

Re: Search Ticket via PowerShell

pour ajouter un suivi (ou n'importe quel objet) il faut utiliser la methode POST
la methode PUT est pour mettre à jour un objet déjà existant

ici le suivi n'existe pas encore, vous ne pouvez donc pas le mettre à jour.


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+formcreator2.5.2 PHP7.0 Mariadb10
*GLPI 9.4.6(behaviours2.2.1+fusioninventoty 9.4+1.1+applicatifs2.5.0+fields 1.9.1) php7.3 mysql5.6 hebergé sur serveur mutualisé.
TEST GLPI9.5.2 mutualisé OVH (  collecteur KO en attente 9.5.3 pour tester fix)

Offline

#7 2020-10-13 13:16:13

Jean-Christophe
Moderator
Registered: 2007-08-22
Posts: 536

Re: Search Ticket via PowerShell

Hello,
Il existe un module powershell qui facilite grandement la manipulation de l'API de GLPI.
Le lien est dans un post en tête du forum API.

Offline

#8 2020-10-13 19:21:29

mrvls
Member
Registered: 2020-10-03
Posts: 7

Re: Search Ticket via PowerShell

J'ai eu de mauvaises expériences avec les modules donc j'évite, malheureusement.
Ceci dit je l'ai ouvert et il m'a été très utile pour comprendre les bases et la méthode d'encoding pour envoyer des données.

LaDenrée wrote:

pour ajouter un suivi (ou n'importe quel objet) il faut utiliser la methode POST
la methode PUT est pour mettre à jour un objet déjà existant

ici le suivi n'existe pas encore, vous ne pouvez donc pas le mettre à jour.

Oui, au temps pour moi, merci. J'avais fini par trouvé, entre les problèmes de syntax d'encoding et de compréhension de ma part... big_smile

Offline

#9 2020-10-13 19:25:13

mrvls
Member
Registered: 2020-10-03
Posts: 7

Re: Search Ticket via PowerShell

Au passage puisque je vous tiens tous les deux.. et je ne vois pas de réponse dans le module ps:

J'ai de petits problèmes pour récupérer les données des tickets issus des formulaires formcreator.
Mon dernier problème, sur un nouveau projet très similaire au premier, a été de gérer les caractères esperluette (&).

Voici comment je récupère le contenu ...

$ticket = Invoke-RestMethod -Uri "$($AppURL)/Ticket/$ticketNumber" -Headers @{"session-token"=$SessionToken.session_token;"App-Token" = "$AppToken"} -Method Get
$html2 = ([System.Web.HttpUtility]::HtmlDecode($ticket.content))

$html2 = "<div>" + ($html2 -replace "&","&amp;") + "</div>"
$fakeXML = [xml]$html2
$fakeXML.ChildNodes.SelectNodes("div")

Je suppose qu'il y a plus propre ?

Last edited by mrvls (2020-10-13 19:25:42)

Offline

Board footer

Powered by FluxBB