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 2019-05-28 16:16:44

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

Powershell module available

Hello,

J'ai fait un petit module Powershell pour manipuler GLPI à travers l'API Rest.
Il est disponible ici : https://github.com/J-C-P/PSGLPI

N'hésitez pas à faire des commentaire, à vous en servir, etc.

Bon amusement !

Offline

#2 2019-06-03 11:56:59

Aurel44
Member
Registered: 2016-05-12
Posts: 23

Re: Powershell module available

Super ! Merci Jean-Christophe !
Je vais tester ça. smile

Offline

#3 2019-06-05 03:20:46

SilentBob999
Member
Registered: 2019-05-25
Posts: 12

Re: Powershell module available

Bonjour,
Je viens de tomber sur votre module.
Je vais probablement l'utiliser et je vous en remercie.

J'en était à l'étape de tester la lecture et modification des différents items.
Votre structure rendra mon code plus clair.

Offline

#4 2019-06-05 11:25:24

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

Re: Powershell module available

SilentBob999 wrote:

Bonjour,
Je viens de tomber sur votre module.
Je vais probablement l'utiliser et je vous en remercie.

J'en était à l'étape de tester la lecture et modification des différents items.
Votre structure rendra mon code plus clair.

Salut,

Pour l'instant, il correspond à mes besoins qui ne sont sans doute pas aussi étendus que certains autres.
Si je peux ajouter ce qui manque, il ne faut pas hésiter à le dire.
Tant qu'à faire, autant que ça serve :-)

Quoi qu'il en soit, je suis là si il y a des questions.

Bon amusement!

Offline

#5 2019-06-06 21:04:19

SilentBob999
Member
Registered: 2019-05-25
Posts: 12

Re: Powershell module available

Bonjour,
J’ai dû faire quelques ajustements. 
Avec l'API de GLPI, après la création d'une session, la première requête me renvoie toujours un document html au lieu du résultat de la requête. Ensuite ça va.
Avec ta fonction, étant donné qu'elle crée une session et la termine à chaque commande, je dois en fait faire deux commandes en extra dans « GetGLPISessionToken » pour que ça fonctionne...
Je me doute que côté performance ce n'est pas l'idéal. Ne serait-ce pas mieux de garder la session en global et la terminé manuellement ?

Je prévois ajouter les éléments manquant dans « Get-GlpiSearchOptions », avec tous les plugins qui s'attache c'est pratique.


Je ne sais pas si c'est GLPI ou le CMDlet ConvertTo-Json qui ne respecte pas les normes mais j'ai un fix pour réparer un petit bug/anomalie sur lequel je suis tombé. Je vais essayer de te le pousser dans Github quand j'aurai le temps (je ne m'y connais pas trop et je suis vraiment débordé).

On se reparle bientôt.
Bonne journée.

Offline

#6 2019-06-07 09:33:27

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

Re: Powershell module available

Merci pour ces retours :-)

En effet, l'ouverture/fermeture des sessions n'est pas idéale en terme de performance.
Le truc, c'est que, dans mon cas, c'est surtout des updates qui sont faits suite à une action humaine, il y a donc de long délais entre les différentes actions et j'avais des sessions expirées.

Le top, ce serait de pouvoir tester si la connexion existe toujours et, si pas, la recréer. Mais je n'ai jamais franchi le pas...

Offline

#7 2019-06-07 15:59:08

SilentBob999
Member
Registered: 2019-05-25
Posts: 12

Re: Powershell module available

En fait, pour clarifier en ce qui concerner l'ouverture de session. C'est surtout qu'il semble y avoir un bug de mon côté.
Je fais un initSession avec un token, ce qui me donne le token de session.
Mais la première requête que j'effectue par la suite, peu importe laquelle retourne du code HTML qui correspond à la page de connexion. (username, password, etc..)
J'ignore ce retour et dès la requête suivante, tous fonctionnent correctement.
Ce qui veut dire que si j'ai des fonctions qui ouvre et ferme les sessions à chaque commande, non seulement j'ai ces requêtes en extra, mais je dois ajouter une autre commande bidon à faire dans la fonction initSession.

Outre ce bug, c'est certain que dans l'idéal, le session token pourrait contenir une valeur d'expiration et il serait possible dans faire un refresh.
Le seul autre API avec lequel j'ai travaillé permettais de faire cela : https://www.questrade.com/api/documenta … horization

Offline

#8 2019-06-13 13:08:24

Turboooo
Member
From: Poland
Registered: 2019-06-13
Posts: 7

Re: Powershell module available

Hi,

If you want to exchange some knowledge visit my example of GLPI API in PowerShell smile
It works on Windows and Linux
Search at GithHub for: PowerShellPlace/GlpiTools


Best Regards!

Offline

#9 2019-06-13 13:22:05

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

Re: Powershell module available

Thanks for the comment.
I will have a look :-)

Offline

#10 2019-06-13 22:17:39

ronnie.peeters
Member
From: Eindhoven, the Netherlands
Registered: 2016-10-09
Posts: 72

Re: Powershell module available

Thanks! I will take a look. Looks good


GLPI 9.4.3 - Currently in Dev environment - preparing for production
-Preparing data migration from OSTicket to GLPI for the Ticketing/Helpdesk part.
-Preparing data migration from OrangeSCRUM to GLPI for the project management part.
@Working at a company that is responsible for the IT environment of over 4500 employees that have IT assets

Offline

#11 2019-06-14 14:02:21

Turboooo
Member
From: Poland
Registered: 2019-06-13
Posts: 7

Re: Powershell module available

@SilentBob999 I translate your post, and question is: Do you have MyDashboard plugin ?
If Yes, disable it, and check PSModule of @Jean-Christophe one more time smile

I faced with that problem few months ago and solution were, resign from MyDashboard plugin

Kind Regards
Wojtek

Last edited by Turboooo (2019-06-14 17:03:54)


Best Regards!

Offline

#12 2019-06-18 21:49:01

SilentBob999
Member
Registered: 2019-05-25
Posts: 12

Re: Powershell module available

Turboooo wrote:

@SilentBob999 I translate your post, and question is: Do you have MyDashboard plugin ?
If Yes, disable it, and check PSModule of @Jean-Christophe one more time smile

I faced with that problem few months ago and solution were, resign from MyDashboard plugin

Kind Regards
Wojtek

Thanks, I will look into that

Offline

#13 2019-06-18 21:58:41

SilentBob999
Member
Registered: 2019-05-25
Posts: 12

Re: Powershell module available

@Jean-Christophe
Voilà quelques ajouts/modification:
https://github.com/SilentBob999/PSGLPI
Vous pouvez faire des cherry-pick ou en copier le code que vous voulez. Je ne maitrise pas suffisament Git pour pousser une branche sur votre repo.
Merci

Offline

#14 2019-09-10 17:00:19

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

Re: Powershell module available

@SilentBob999
Merci :-)
Je vais intégrer le remove-items dans ma version.
Pour le reste, je n'ai pas trouvé, au premier coup d'oeil, les modif sur le json. Tu t'en souviens?

Encore merci pour ta participation smile

Offline

#15 2019-10-25 17:00:26

SilentBob999
Member
Registered: 2019-05-25
Posts: 12

Re: Powershell module available

Jean-Christophe wrote:

Pour le reste, je n'ai pas trouvé, au premier coup d'oeil, les modif sur le json. Tu t'en souviens?

Bonjour Jean-Christophe,

Il s'agissait de :

    if (($Details["input"] | Get-Member -MemberType Properties).Count -eq 1){
        $json = $json.Remove(($lastIndex = $json.LastIndexOf("]")),1).Insert($lastIndex,"").Remove(($firstIndex = $json.IndexOf("[")),1).Insert($firstIndex,"")
    }

Je n'ai pas réussi à reproduite le problème que cela corrigeait. 

J'avais comme souvenir que cela m'arrivait lorsque j'envoyais un tableau contenant un seul élément.  Plus particulièrement lorsque je l'envoyais sous forme de PSCustomObject plutôt que de hashtable (c'était à cela que servait le count des propriétés je crois).
Mais maintenant le résultat de la conversion en JSON est pareil dans les deux cas (PSCustomObject vs hashtable) et GLPI ne bug plus (on a passé quelque version depuis) lorsqu’il y a un seul élément dans un tableau. Ex. :
Ceci ne fonctionnais pas avant, maintenant ça passe :

 
{"input":  [ { "name": "CC test"} ]} 

Bref, vaut mieux ignorer.

Offline

#16 2019-10-28 12:39:38

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

Re: Powershell module available

OK, merci pour le feedback. :-)

Offline

#17 2019-10-29 16:49:44

ec2311
Member
Registered: 2016-04-07
Posts: 295

Re: Powershell module available

Bonjour

Je suis désolé, je n'arrive pas à faire fonctionner le module powershell

A chaque execution, j'obtiens une erreur 400 lors de la getGLPISessionToken sad
la variable $creds semble correctement renseignée (Usertoken = jeton API de l'utilisateur, authorizationType = user_token, AppToken = Clé definie pour l'adresse ip du User, puis l'url de l'apirest)

A chaque fois donc j'ai erreur 400 (demande incorrecte sur PSGLPI.PSM1:8 : 70, qui correspond à l'invoke-restMethod...

Néanmoins :
Je lance le Powershell sur mon PC. A aucun moment je n'ai donc une authentification demandée. (le site ne demande pas avec quel utilisateur je me connecte)
Du coup je me demande si la clé Usertoken est la bonne, ou plus exactement : comment la definir, vu que pas d'authentification...

Merci


GLPI 10.0.10
GLPIinventory 1.3.4

Agents : FI (2.6, 2.5) et Glpiagents (1.7)

Offline

#18 2019-12-23 12:33:14

Turboooo
Member
From: Poland
Registered: 2019-06-13
Posts: 7

Re: Powershell module available

Hi!

Documentation of GlpiTools Project is already at Website : https://www.wpietrzak.pl/projects/ smile


Best Regards!

Offline

#19 2020-01-04 19:37:54

Turboooo
Member
From: Poland
Registered: 2019-06-13
Posts: 7

Re: Powershell module available


Best Regards!

Offline

#20 2021-04-13 11:38:00

Dead-Red
Member
From: France - Aisne - 02
Registered: 2021-04-10
Posts: 20

Re: Powershell module available

Bonjour tout le monde

Encore bravo pour le plugin PSGLPI.

Quelqu'un pourrait-il me dire s'il a réussi à utiliser la fonction : Add-GlpiSubItem avec un document ?

Je dois sans aucun doute mal composer la variable $details.

Mais avec le code dans la fonction peu importe j'obtiens toujours :  Invoke-RestMethod : ["ERROR_BAD_ARRAY","Le paramètre input doit être un tableau d'objets; Afficher la documentation dans votre navigateur...

Test1 :

$Details = @{
input=@{
name="Upload"
_filename="clear.png"}
}

Test2 :
$Details = @(
@{ name ="Uploaded document";};
@{ _filename= "clear.png";}; )

Test3:
$Details = @{
input=@{
name="Upload"
_filename="clear.png"}
}

Et j'en passe bien d'autres.

Mais nan ça ne veux pas s'upload sad

Si quelqu'un a la bonne syntaxe je suis preneur.

Offline

#21 2021-04-13 11:55:01

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

Re: Powershell module available

Ah, oui, non sad
L'upload ne passe pas. Je n'y suis jamais arrivé. sad

Je ne suis jamais parvenu à former un "uploadmanifest" qui lui plaise :-(
Quand j'en ai eu besoin, j'ai fini par faire un upload avec CURL, récupérer l'ID puis associer l'ID du document au ticket, à la FAQ, etc.

Sorry mais là, ça ne fonctionne pas.

C'est pas faute d'avoir essayé.

Offline

#22 2021-04-13 12:02:07

Dead-Red
Member
From: France - Aisne - 02
Registered: 2021-04-10
Posts: 20

Re: Powershell module available

Ah, je comprend mieux big_smile

Si toi déjà tu n'as pas réussi je ne suis pas prêt de le faire fonctionner tongue
En tout cas top pour les autres commandes.

Et tu sais pourquoi on doit passer par l'uploadmanifest ? Car quand on regarde ceux qui font en php on voit le input mais jamais l'autre tongue

A tout hasard, si prochainement tu as le temps et si ça ne te pose pas de problème, tu saurais transmettre ton code "powershell -curl ? big_smile" car pareil la j'ai essayé de lancer directement du curl depuis powershell mais je n'ai pas le niveau sad

Dans tous les cas merci de m'avoir répondu.

Offline

#23 2021-04-13 12:10:06

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

Re: Powershell module available

Tu peux tenter avec ceci.
C'est un petit bout de script qui devrait être opérationnel.
Il faut quand même adapter deux ou trois détails, mais tu devrais t'y retrouver.

Function GetGLPISessionToken {
    param($Creds)
    #Get-Date -f T | write-host -NoNewLine
    #Write-Host " Enter Function"
    $Creds.AuthorizationType
    if (("Basic","user_token") -ccontains $Creds.AuthorizationType) {
        invoke-RestMethod "$($Creds.AppURL)/initSession" -Headers @{"Content-Type" = "application/json";"Authorization" = "$($Creds.AuthorizationType) $($Creds.UserToken)";"App-Token"=$Creds.AppToken}
    }
    else {Write-Host 'AuthorizationType MUST be "user_token" or "Basic". This is Case Sensitive.' -ForegroundColor Red}
}

$GlpiCreds = @{
AppURL = "https://servicedesk.***********/apirest.php"
UserToken = "***************"
AppToken = "*******************"
AuthorizationType = "user_token"
}

cls


$SessionToken = GetGLPISessionToken -Creds $GlpiCreds
$TicketID="05093"

$DocumentUpload = C:\curl\bin\curl.exe `
-X POST `
-H 'Content-Type: multipart/form-data' `
-H "Session-Token: $($SessionToken.session_token)" `
-H 'App-Token: z****************' `
-F 'uploadManifest={\"input\": {\"name\": \"Document ticket $($ticketID)\", \"_filename\" : [\"05093-010.pdf\"], \"tickets_id\":\"164\"}};type=application/json' `
-F 'filename[0]=@"J:\Locpub\INTERREGIO\GLPI\Incident\05093-010.pdf"' `
-s `
-k 'https://servicedesk.***************/apirest.php/Document/'

Invoke-RestMethod "$($GlpiCreds.AppUrl)/killSession" -Headers @{"session-token"=$SessionToken.session_token; "App-Token" = "$($GlpiCreds.AppToken)"}

$DocumentUpload = ConvertFrom-Json $DocumentUpload

$DocumentUpload.upload_result.filename.filesize
$DocumentUpload.id
$DocumentUpload.message

$details = @{
    documents_id= "45"
    items_id= "85"
    itemtype= "Ticket"
    entities_id= "0"
    users_id= "2804"
    date="1978-20-11 00:00"
    }
#Add-GlpiSubItem -Creds $GlpiCreds -ItemType document -Details $details -ID 45 -SubItemType Document_Item

Offline

#24 2021-04-13 13:00:37

Dead-Red
Member
From: France - Aisne - 02
Registered: 2021-04-10
Posts: 20

Re: Powershell module available

Un grand merci pour ton partage wink

Offline

#25 2021-04-13 21:50:35

Dead-Red
Member
From: France - Aisne - 02
Registered: 2021-04-10
Posts: 20

Re: Powershell module available

Je ne sais pas si ça pourrait aider, mais une personne à publier ce bout de code en PYTHON pour réaliser l'upload sur GLPI.

ça pourrait peut être aiguiller certains ?

multipart_form_data = {
    'uploadManifest': (None, '{"input": {"name": "test123.png", "_filename": ["test123.png"]}}'),
    'file': ('test123.png', open('test123.png', 'rb')),
}

Je vais continuer de creuser sad

Last edited by Dead-Red (2021-04-13 22:17:44)

Offline

Board footer

Powered by FluxBB