FreshRSS

🔒
❌ À propos de FreshRSS
Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.
À partir d’avant-hierFlux principal

Un téléchargeur de musique scriptable

20 septembre 2021 à 09:00
Par : Korben

Voici un script Python qui va vous plaire si vous aimez la musique. Une fois installé, Streamrip va vous permettre de télécharger rapidement des morceaux en provenances de différents services de streaming en se basant sur leur API.

Morceaux, albums, playlists, discographies, tout y passe. Il existe pleins de services et d’outils capables de faire ça donc ce n’est pas une grosse nouveauté mais streamrip est intéressant puisqu’il est totalement modifiable et scriptable.

Streamrip propose également une fonctionnalité de recherche de morceaux soit via des mots clés, soit en fonction des Top de certains services :

Il récupère des morceaux en excellente qualité, avec le bon nommage, les bonnes métadonnées et est également capable de les convertir automatiquement au format voulu.

C’est un script qu’il est facile d’intégrer dans vos process. Je ne vous en dit pas plus et je vous laisse découvrir ça ici.

A travers les multivers en javascript

14 septembre 2021 à 09:00
Par : Korben

L’ami JeSuisUnDev dont vous connaissez forcément le site si vous vous intéressez un peu à votre métier de développeur s’est mis dans la tête de coder l’univers ! Hé oui, rien que ça !

En JavaScript.

Il a réussi à créer plusieurs univers de manière procédurale, et en a fait un jeu auquel vous pouvez jouer directement depuis votre navigateur.

Le jeu s’appelle Across The Multiverse. Il est très relaxant, vous vous baladez dans l’espace à la recherche d’un trou noir (comme dans Interstellar, pas comme au Bois de Boulogne) et lorsque vous le trouvez, et bien vous foncez dedans pour rejoindre l’univers suivant.

Pour réaliser cet exploit, il a utilisé la lib Three.js qui permet d’exploiter WebGL via JS pour produire un rendu 3D directement depuis votre browser. Évidemment tout est open source et vous pouvez consulter le code.

Par contre, je ne veux pas vous spoiler mais sachez que si vous allez jusqu’au bout du jeu, vous apercevrez Dieu en personne.

Si vous voulez en savoir plus sur la réalisation de cet exploit, je vous invite à lire le post de blog qu’il a écrit sur le sujet.

Bravo !

Visual Studio Code en version Web ? C’est pour bientôt !

2 septembre 2021 à 17:01

Microsoft a révélé accidentellement que Visual Studio Code for the Web était disponible en version Preview ! Finalement, il ne l'est pas encore, mais cela ne devrait plus tarder !

L'éditeur de code Visual Studio Code existe déjà en version Desktop et il s'agit de la version gratuite de Visual Studio. Prochainement, Microsoft va proposer une version en ligne (toujours gratuite) de son éditeur de code, accessible directement à partir d'un navigateur à l'adresse suivante : https://vscode.dev. Récemment, c'est GitHub qui a lancé son propre éditeur en ligne, accessible à partir de son compte à l'adresse suivante : https://github.dev.

Avec cette version Web, Microsoft précise qu'il sera possible d'ouvrir ses projets hébergés sur GitHub, mais aussi en local sur sa machine, et par la suite sur Azure Repos. Puisqu'il s'agit d'une version Web, ce ne sont pas les ressources de votre machine qui sont utilisées pour exécuter votre code.

Bien qu'elle devrait être plus légère, difficile de savoir quelles seront les fonctionnalités manquantes par rapport au client lourd. Ce qui est sûr, c'est qu'il sera possible d'éditer le code, et même plusieurs fichiers en même temps. Les erreurs de codes seront mises en évidence.

Aperçu de Visual Studio Code for the Web
Aperçu de Visual Studio Code for the Web

Dans le même temps, Microsoft a publié Visual Studio Code v1.6 en mode desktop. Sous Windows 11, il sera possible de télécharger Visual Studio et Visual Studio Code directement à partir du Microsoft Store. Une bonne nouvelle qui confirme également les intentions de Microsoft avec son nouveau Store.

Que pensez-vous de l'utilité de VSCode en mode Web ?

Source

The post Visual Studio Code en version Web ? C’est pour bientôt ! first appeared on IT-Connect.

Comment exécuter du Python dans une page web ?

24 août 2021 à 09:00
Par : Korben

Bon, le JavaScript vous voyez ce que c’est. C’est un langage interprété qui permet de lancer du code directement via les pages web que nous consultons.

Cool.

Bon, et maintenant si je vous disais qu’on peut faire exactement la même chose, mais en Python ?

Vous me dites : SORCELLERIE !!!

Et vous avez raison. N’empêche que c’est totalement faisable grâce à Brython. Brython est une implémentation de Python 3 fonctionnant dans le navigateur, avec une interface pour les éléments DOM et les événements.

Voici un bout de code de ce que ça donne :

    <html>

        <head>
            <script type="text/javascript" src="/path/to/brython.js"></script>
        </head>

        <body onload="brython()">

            <script type="text/python">
            from browser import document, alert

            def echo(event):
                alert(document["zone"].value)

            document["mybutton"].bind("click", echo)
            </script>

            <input id="zone"><button id="mybutton">click !</button>

        </body>

    </html>

Il suffit donc de charger dans la page le fichier brython.js puis d’appeler la fonction brython() au chargement de la page pour ensuite pouvoir fourrer du code Python dans une balise script comme vous le feriez en JavaScript. Un tutoriel est dispo ici.

Magique non ?

Brython supporte la syntaxe de Python 3, y compris les compréhensions de listes, les générateurs, les métaclasses, les importations, etc. et de nombreux modules de la distribution CPython.

Brython dispose de bibliothèques pour interagir avec les éléments DOM et les événements, ainsi qu’avec les bibliothèques JavaScript existantes telles que jQuery, D3, Highcharts, Raphael, etc. Il prend en charge les dernières spécifications de HTML5/CSS3, et peut utiliser des cadres CSS comme Bootstrap3, LESS, SASS, etc.

Bref, c’est de la bonne.

D’ailleurs, si vous voulez voir ce que ça donne, il y a une belle page d’exemples avec code source ici.

Ça peut vous permettre surtout d’utiliser du code existant dans des pages web sans devoir tout vous retaper à réécrire en JS. Et ça, c’est beau.

Si vous voulez plus d’infos sur Brython, c’est par ici que ça se passe.

PowerShell grep : rechercher des chaînes de caractères avec Select-String

23 août 2021 à 11:00

I. Présentation

Dans ce tutoriel, nous allons voir comment utiliser grep en PowerShell grâce à la commande Select-String dans le but de rechercher une chaîne de caractères dans un ensemble de fichiers.

La commande "grep" est très populaire sous Linux et elle est très appréciée des administrateurs système. En effet, elle permet de rechercher des chaînes de caractères au sein de fichiers présents sur votre machine, de manière efficace. Au quotidien, c'est très pratique pour rechercher un mot clé dans un fichier de configuration ou effectuer une recherche au sein d'un fichier de log.

Sous Windows, il existe une commande équivalente à grep par l'intermédiaire de PowerShell. Il s'agit de la commande Select-String et je vous propose d'apprendre à l'utiliser en lisant cet article. Il y a également une autre alternative sous Windows, par l'intermédiaire de l'outil natif findstr.exe.

II. Les paramètres de Select-String

La commande Select-String contient de nombreux paramètres qui vont être utiles pour affiner notre filtre de recherche. Avant de passer à la pratique, il me semblait intéressant de vous lister et de vous expliquer les paramètres principaux.

-AllMatches

Rechercher toutes les occurrences de notre chaîne de caractères / de notre filtre sur une même ligne. Par défaut, Select-String va s'arrêter dès qu'il trouvera un premier résultat sur une ligne, ce qui peut s'avérer contraignant. Avec ce paramètre, nous aurons tous les résultats, sans limites. Autrement dit, sans -AllMatches, on peut avoir seulement un résultat par ligne.

-CaseSensitive

Par défaut, la recherche n'est pas sensible à la casse. Lorsque ce paramètre est défini, la recherche va tenir compte de la casse, c'est-à-dire des minuscules et majuscules.

-Context

Paramètre très intéressant qui va permettre d'indiquer combien de lignes avant et après le match (résultat) il faut afficher, en plus de la ligne correspondante à la recherche. Je trouve cela particulièrement intéressant lorsque l'on s'intéresse à des logs.

-Encoding

Permets de spécifier l'encodage à utiliser. Par défaut "utf8NoBOM", mais il y a d'autres choix : ascii, oem, unicode, utf8, utf32, etc.

-Exclude

Exclure certains fichiers du périmètre de la recherche. Par exemple, tous les fichiers qui utilisent une extension spécifique.

-Include

Inclure uniquement les fichiers correspondants au filtre -Inclure. Par exemple, pour effectuer une recherche uniquement sur les fichiers .log.

-InputObject

Rechercher dans un objet existant (envoyé en entrée) plutôt qu'au sein des fichiers stockés dans un dossier.

-NotMatch

Afficher les résultats qui ne correspondent pas au filtre de recherche / recherche inverse.

-Pattern

C'est ici que l'on spécifie le filtre de la recherche, ce qui peut être une simple chaîne de caractères, plusieurs chaînes de caractères, mais aussi un filtre sous la forme d'une expression régulière (regex).

-Path

Ce paramètre basique sert à spécifier le répertoire dans lequel effectuer la recherche ou le fichier dans lequel rechercher.

Maintenant que le décor est planté, passons à la pratique : connaître les paramètres de Select-String c'est bien, savoir les utiliser c'est encore mieux.

III. PowerShell grep avec Select-String : exemples

Pour mieux comprendre le fonctionnement de la commande "grep" à la sauce Windows, je vous propose quelques exemples.

A. PowerShell - Rechercher une chaîne de caractères dans un fichier

Commençons par rechercher une chaîne de caractères simple dans un fichier spécifique : la chaîne "florian" dans le fichier "data.csv" qui contient une liste d'utilisateurs.

Voici le contenu du fichier :

prenom;nom;
florian;burnel;
gerard;mensoif;
vincent;tyme;
maude;zarella;

Voici la commande recherche :

Select-String -Path "C:\TEMP\GREP\Data.csv" -Pattern "florian"

Voici le résultat :

Exemple d'utilisation de Select-String (grep) en PowerShell

Le résultat est correct puisqu'il a trouvé la ligne avec la chaîne "florian". Le terme est surligné dans le résultat pour bien montrer son emplacement dans la liste. Plus précisément, voici comment se décompose la ligne :

TEMP\GREP\Data.csv:2:florian;burnel;
<fichier-où-se-situe-le-résultat>:<numéro de ligne>:<contenu de la ligne>

Il y a plusieurs propriétés associées à cette commande. Par exemple, nous pouvons récupérer le numéro de la ligne :

(Select-String -Path "C:\TEMP\GREP\Data.csv" -Pattern "florian").LineNumber

Pour visualiser toutes les propriétés et méthodes disponibles, on utilisera "Get-Member" (gm).

Select-String -Path "C:\TEMP\GREP\Data.csv" -Pattern "florian" | gm

B. PowerShell - Rechercher une chaîne de caractères dans plusieurs fichiers

Nous pouvons rechercher la chaîne "florian" dans plusieurs fichiers, et pas seulement dans le fichier "data.csv". Si l'on veut rechercher ce terme dans tous les fichiers du dossier "C:\TEMP\GREP", on utilisera cette commande :

Select-String -Path "C:\TEMP\GREP\*" -Pattern "florian"

Voici le résultat :

TEMP\GREP\Data.csv:2:florian;burnel;
TEMP\GREP\Data3.csv:4:florian;burnel;

Cette fois-ci, la commande a trouvé deux résultats différents, au sein de deux fichiers distincts.

C. PowerShell - Rechercher plusieurs chaînes de caractères

Si l'on veut rechercher plusieurs chaînes de caractères différentes, il n'est pas nécessaire d'utiliser plusieurs commandes : le paramètre -Pattern prend en charge les valeurs multiples. Il suffit de les séparer par une virgule.

Voici un exemple :

Select-String -Path "C:\TEMP\GREP\*" -Pattern "florian","tyme"

Voici le résultat :

Lorsque l'on commence à rechercher plusieurs chaînes dans plusieurs fichiers, il me semble pertinent de revoir un petit peu la mise en forme du résultat. Pour cela, nous allons nous aider du cmdlet Select-Object pour sélectionner les propriétés que l'on souhaite afficher.

Par exemple, on peut récupérer le nom du fichier, le pattern trouvé et le contenu de la ligne :

Select-String -Path "C:\TEMP\GREP\*" -Pattern "florian","tyme" | Select-Object FileName, Pattern, Line

Ce qui donne :

Note : on pourrait remplacer "Filename" par "Path" pour afficher le chemin complet vers le fichier.

Pratique, n'est-ce pas ? 🙂

Pour affiner la recherche et sélectionner uniquement les fichiers TXT, il y a deux manières de procéder.

Note : au préalable, je fais une copie du fichier data.csv en data10.txt pour que cela fonctionne.

Tout d'abord, on peut indiquer le filtre directement au niveau de -Path, comme ceci :

Select-String -Path "C:\TEMP\GREP\*.txt" -Pattern "florian","tyme"

Sinon, on peut utiliser le paramètre -Include pour filtrer sur une extension de fichiers. Ce qui donne la commande suivante pour un filtre sur .TXT :

Select-String -Path "C:\TEMP\GREP\*" -Include "*.txt" -Pattern "florian","tyme"

L'avantage de -Include, c'est que l'on peut préciser plusieurs filtres. Voici un exemple pour .TXT et .CSV :

Select-String -Path "C:\TEMP\GREP\*" -Include "*.txt","*.csv" -Pattern "florian","tyme"

D. PowerShell - Rechercher à l'aide du paramètre -Context de Select-String

Le paramètre -Context permet d'afficher la ligne où le pattern a été trouvé, ainsi que les X lignes précédentes et les X lignes suivantes. Si l'on utilise -Context 3, on va obtenir 7 lignes au total : 3 lignes avant la ligne où le pattern est présent, la ligne où le pattern est présent, et 3 lignes après la ligne où le pattern est présent.

Voici un exemple où je recherche les erreurs 404 au sein d'un fichier de log de Nginx :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 3

On peut gérer de façon indépendante le nombre de lignes avant et après à afficher. Il suffit de préciser deux valeurs séparées par une virgule. La première valeur correspond au nombre de lignes avant et la seconde au nombre de lignes après.

Par exemple, pour afficher une ligne avant et trois lignes après, cela donne :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 1,3
Exemple d'utilisation de Select-String (grep) en PowerShell avec le paramètre -Context

Grâce au caractère ">" on peut repérer facilement la ligne où a été trouvé le pattern.

Sur un fichier très conséquent, la sortie dans la console peut être importante. On peut exporter le résultat de la recherche vers un autre fichier, comme ceci (vers le fichier C:\TEMP\resultat-grep.txt) :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 1,3 | Out-File -Path "C:\TEMP\resultat-grep.txt"

On pourrait aussi limiter l'affichage au premier résultat ou au X premiers résultats. Pour cela, on va coupler Select-String à l'utilisation de Select-Object :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 0,1 | Select-Object -First 1

On peut aussi affiner avec Select-Object et exporter dans un fichier ce résultat affiné :

Select-String -Path "C:\TEMP\GREP\access-light.log" -Pattern "404" -Context 1,3 | Select-Object -First 1 | Out-File -Path "C:\TEMP\resultat-grep.txt"

E. PowerShell - Recherche récursive avec Select-String

Seule, la commande Select-String recherche uniquement dans le dossier courant, mais pas de manière récursive c'est-à-dire que les sous-dossiers ne sont pas pris en compte. Pour utiliser la récursivité, il faut s'appuyer sur la commande Get-ChildItem puisqu'elle va permettre de récupérer la liste de l'intégralité des fichiers et dossiers. Ce résultat sera envoyé à la commande Select-String via le pipe "|". À partir de là, on peut effectuer un grep récursif à l'aide de PowerShell.

On viendra positionner le répertoire -Path au niveau de Get-ChildItem donc il n'est plus nécessaire de le spécifier au sein de Select-String.

Get-ChildItem -Path "C:\Temp\GREP\" -Recurse | Select-String -Pattern "florian"

Puisque ls et dir sont des alias de Get-ChildItem, on peut les utiliser également.

ls "C:\Temp\GREP\" -Recurse | Select-String -Pattern "florian"
dir "C:\Temp\GREP\" -Recurse | Select-String -Pattern "florian"

On peut voir sur l'image ci-dessous que nous avons un nouveau résultat, au sein du sous-dossier "SOUS-DOSSIER", ce qui n'était pas le cas précédemment.

PowerShell : comment utiliser Select-String de manière récursive ?

F. PowerShell - Rechercher toutes les adresses IP dans un fichier

Pour finir, je vous propose un dernier exemple où l'on va rechercher les adresses IP dans un fichier. Nous n'allons pas rechercher une adresse IP précise, car c'est trop facile, mais l'on va rechercher toutes les adresses IP présentes dans le fichier de log "access.log".

Pour cela, on va s'appuyer sur une expression régulière. Comme je l'expliquais dans mon tutoriel sur le sujet, on peut rechercher une adresse IP avec le pattern suivant :

\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

Bien qu'il ne soit pas ultra précis, car il autorise les adresses IP 300.300.300.300, 400.500.600.700, etc... Il devrait être suffisant pour s'attaquer à ce fichier de log. Il suffit de préciser l'expression régulière au sein du paramètre -Pattern :

Select-String -Path "C:\TEMP\GREP\access.log" -Pattern "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

Ce qui donne :

Rechercher toutes les adresses IP présentes dans un fichier

Suite à cette recherche, on pourrait facilement obtenir la liste de toutes les adresses IP référencées dans ce fichier. Pour cela, il faut regarder au sein des différents matchs de la Regex avec une boucle sur $_.Matches et une seconde boucle pour récupérer la valeur de chaque match. Ce qui donne la commande suivante :

Select-String -Path "C:\TEMP\GREP\access.log" -Pattern "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" | Foreach{ $_.Matches } | Foreach{ $_.Value }

Ensuite, on obtient la liste des adresses IP trouvées dans le fichier access.log :

On pourrait affiner notre pattern et rechercher toutes les requêtes qui correspondent à un réseau IP spécifique, ou qui commence d'une certaine façon. Par exemple, pour rechercher toutes les requêtes (c'est-à-dire toutes les lignes) où l'on trouve une adresse IP sous la forme "211.X.X.X", on fera :

Select-String -Path "C:\TEMP\GREP\access.log" -Pattern "211.\d{1,3}.\d{1,3}\.\d{1,3}"

De la même façon, on pourrait rechercher toutes les lignes avec une adresse IP sous la forme "192.168.X.X" :

Select-String -Path "C:\TEMP\GREP\access.log" -Pattern "192.168.\d{1,3}\.\d{1,3}"

Voilà, c'est la fin du dernier exemple sur l'utilisation de Select-String. Mais ce n'est pas terminé, il nous reste un petit bonus à découvrir.

IV. Bonus : créer un alias grep pour Select-String

Vous aimeriez pouvoir saisir "grep" plutôt que "Select-String" ? Alors j'ai une solution pour vous : la création d'un alias !

Il suffit de créer un alias de cette façon :

New-Alias grep Select-String

Ensuite, on peut utiliser grep à la place de Select-String, mais les paramètres restent les mêmes, bien entendu.

grep -Path "C:\TEMP\GREP\access.log" -Pattern "127.0.\d{1,3}\.\d{1,3}"
Créer un alias grep pour la commande Select-String

Attention, cet alias sera temporaire : lorsque la console PowerShell sera fermée, il sera supprimé. Pour le rendre persistant, je vous invite à lire mon tutoriel sur les alias en PowerShell : PowerShell - Alias

N'hésitez pas à partager vos astuces avec Select-String en PowerShell en postant un commentaire sur cet article ! 😉

The post PowerShell grep : rechercher des chaînes de caractères avec Select-String first appeared on IT-Connect.

Simplifiez vous la vie avec votre Raspberry Pi

18 août 2021 à 09:14
Par : Korben

Vous le savez, grâce aux gens qui soutiennent le site, je peux maintenant faire un peu plus de contenu, notamment des vidéos que je leur donne en avant première.

Cette semaine, je libère donc une vidéo où je vous présente un script nommé piKiss qui va faire plaisir aux utilisateurs de Raspberry Pi.

PiKiss est un script qui permet d’installer des tas de logiciels sur votre Raspberry Pi sans vous prendre la tête, mais également de l’optimiser pour y faire de la place ou alléger la mémoire et le processeur.

C’est un outil intéressant que je vous propose donc de passer en revue avec moi dans cette vidéo. J’espère que ça vous intéressera.

Une fois encore, je tiens à vous remercier pour votre soutien. Si certains sujets vous intéressent plus que d’autres, n’hésitez pas non plus à m’en faire part, je serai ravi de voir ce que je pourrais faire avec ça.

Et pour rejoindre les vrais de la première heure et me soutenir, c’est par ici !

Comment trouver des profils web par nom d’utilisateur ?

15 août 2021 à 09:00
Par : Korben

Si vous faites un peu de renseignements (OSINT) et que tout ce que vous possédez, c’est un pseudo ou nom d’utilisateur, j’ai un outil en python qui va vous plaire.

Cela s’appelle Nexfil et ça permet de débusquer des profils utilisateurs de tout un tas de service, à partir d’un nom ou d’une liste de noms. En moins de 20 secondes, c’est plus de 350 sites qui sont passés en revue et les résultats sont automatiquement sauvegardés dans un fichier texte.

L’objectif de cet outil est d’établir une liste de sites où la personne que vous recherchez a pu se créer un compte avec son pseudo, mais vous pouvez aussi l’utiliser pour vous afin de sécuriser certains sites sur lesquels vous auriez oublié de réserver votre pseudo.

Pour installer Nexfil, ouvrez un terminal et clonez le dépôt suivant :

git clone https://github.com/thewhiteh4t/nexfil.git

Placez-vous ensuite dans le répertoire nexfil :

cd nexfil

Et installez les dépendances nécessaires à l’exécution du script python.

pip3 install -r requirements.txt

Ensuite pour effectuer une recherche, utilisez le paramètre -u comme ceci :

python3 nexfil.py -u LePseudo

À découvrir ici.

Microsoft Edge va bénéficier d’un mode Super Duper Secure

6 août 2021 à 08:00

L'équipe de recherche des vulnérabilités dans Microsoft Edge a annoncé l'arrivée d'un nouveau mode nommé "Super Duper Secure" pour le navigateur de Microsoft, dans le but de renforcer la sécurité.

Lorsque le mode "Super Duper Secure" sera actif dans Edge, le compilateur JavaScript JIT (Just-In-Time) v8 sera désactivé. JIT permet la compilation du code à la volée, ce qui permet notamment d'améliorer les performances.

Grâce à cette modification, il devient possible d'activer des fonctions de sécurité supplémentaires au niveau de Windows : la technologie CET (Control-flow Enforcement Technology) d'Intel qui est une protection contre les exploits, l'ACG (Arbitrary Code Guard) et le CFG (Control Flow Guard).

Johnathan Norman, le responsable de l'équipe de recherche de Microsoft Edge, affirme que près de la moitié des vulnérabilités associées à JavaScript V8 sont liées au processus JIT. Un processus qu'il juge très complexe et difficile à appréhender. Désactiver JIT permet de réduire de façon considérable la surface d'attaque, ce qui n'est pas négligeable.

Le fait d'utiliser Edge sans JIT impacte les performances du navigateur et il y aurait même une baisse des performances de 58%. Néanmoins, cela dépend du type de contenu consulté à partir du navigateur. Pour le moment, les développeurs de Microsoft vont continuer d'améliorer ce mode pour réduire au maximum l'impact sur les performances.

Pour tester ce nouveau mode dès à présent, il est nécessaire d'installer une version Preview de Microsoft Edge. Ensuite, il faut activer le mode "Super Duper Secure" dans les options avancées, à cette adresse :

edge://flags/#edge-enable-super-duper-secure-mode

Je pense qu'une perte au niveau des performances est acceptable si cela reste raisonnable et que la sécurité est réellement renforcée.

Source

The post Microsoft Edge va bénéficier d’un mode Super Duper Secure first appeared on IT-Connect.

Comment exécuter un script PowerShell sous Linux ?

24 juin 2021 à 11:00

I. Présentation

Nous vous parlons très souvent de PowerShell en étant sous Windows, mais il ne faut pas oublier que depuis quelques années, le langage de Microsoft est disponible sous Linux, mais aussi MacOS. Dans ce tutoriel, je vais vous expliquer comment exécuter un script PowerShell sous Linux.

PowerShell Core se base sur une version open source du framework .NET :  le .NET Core. La compatibilité avec les distributions Linux, dépends de la version de PowerShell utilisée : ce ne sera pas la même entre PowerShell 7.0 et PowerShell 7.1.

À l'heure où j'écris cet article, la dernière version stable est PowerShell 7.1.3 et elle est compatible avec Windows bien sûr, mais aussi avec diverses distributions Linux : Ubuntu, Debian, CentOS, RHEL, Fedora ou encore Alpine. Libre à vous d'utiliser une VM, une machine physique ou WSL sous Windows.

Je ne vais pas m'attarder sur l'installation de PowerShell sous Linux, car la méthode peut changer en fonction de la distribution que vous utilisez. Je vous invite à consulter la documentation de Microsoft, vous allez trouver votre bonheur !

II. Utiliser PowerShell sous Linux

Lorsque PowerShell est installé, vous pouvez ouvrir une console PowerShell à partir de votre shell Linux tout simplement avec la commande suivante :

pwsh

Ensuite, il ne reste plus qu'à exécuter vos commandes. L'avantage de ce mode interactif, c'est que vous bénéficiez de l'autocomplétion des commandes PowerShell. Il est à noter que les binaires Linux peuvent être appelés aussi directement depuis la console PowerShell.

Aperçu de la console PowerShell sous Linux

Quand vous avez terminé, pour retourner à votre shell, il suffira de faire :

exit

Attention, en ouvrant PowerShell de cette façon, vous ne pourrez pas exécuter de commandes qui nécessitent des privilèges élevés. Si vous désirez ouvrir une console PowerShell en tant qu'administrateur (si l'on peut dire ça comme ça), il faudra faire :

sudo pwsh

A utiliser avec précautions, bien sûr.

Néanmoins, si vous souhaitez seulement exécuter une commande, ce n'est pas nécessaire d'ouvrir une console... Il y a plus simple. En effet, nous pouvons utiliser l'argument -command ou -c.

Voici un exemple pour lister le contenu d'un répertoire :

pwsh -command "Get-Item /home/florian"

L'inconvénient, c'est qu'il n'y a pas l'autocomplétion, mais comme vous maîtrisez PowerShell ce n'est pas un problème. 😉

Dans le cas où la commande nécessite des privilèges élevés, il suffira d'ajouter "sudo" :

sudo pwsh -command "New-Item -Type File -Path /var/fichier.txt"

Intéressons-nous maintenant à l'exécution d'un script PowerShell sous Linux.

III. Exécuter un script PowerShell sous Linux

Commençons par créer un script... Pour cet exemple, ce script sera tout simple, nous allons récupérer la liste des utilisateurs de la machine Linux à l'aide du contenu du fichier "/etc/passwd".

Ce fichier contient plusieurs informations où les valeurs sont séparées par le caractère ":". On sait aussi que la première valeur correspond au nom de l'utilisateur. À partir de là, il ne reste plus qu'à récupérer la première valeur de chaque ligne.

Avant de créer le script, je vous invite à récupérer le chemin vers le binaire de PowerShell :

which pwsh

La valeur retournée devrait être :

/usr/bin/pwsh

On va utiliser cette valeur pour déclarer le shebang au début du script.

Désormais, nous sommes prêts à créer le script :

nano /home/florian/GetUser.ps1

On commence par ajouter le shebang sur la première ligne :

#! /usr/bin/pwsh

Puis, on ajoute la ligne qui va permettre de récupérer la liste des utilisateurs :

Get-Content "/etc/passwd" | Foreach-Object{ (($_).Split(":"))[0] }

En image, cela donne :

Un script PowerShell, sous Linux

Enregistrez le script... Maintenant, nous allons voir comment l'exécuter. Tout d'abord, comme n'importe quel script, il faut lui ajouter les droits d'exécution :

chmod +x /home/florian/GetUser.ps1

Comme nous avons précisé le shebang, Linux sait quel interpréteur de script il doit utiliser pour exécuter notre script. Il suffit donc de l'exécuter de cette façon :

./GetUser.ps1

Comme vous pouvez le voir sur la copie d'écran ci-dessous, nous obtenons bien la liste des utilisateurs de notre machine Linux.

On récupère la liste des utilisateurs de Linux avec PowerShell

Une autre manière d'exécuter un script PowerShell sous Linux consiste à appeler le binaire et lui indiquer le chemin du fichier via le paramètre -File ou -f :

pwsh -File "/home/florian/GetUser.ps1"

Sous Linux, la politique d'exécution des scripts PowerShell n'est pas prise en charge. La politique "Unrestricted" est appliquée et ne peut pas être modifiée, ce qui nous permet d'exécuter n'importe quel script.

Maintenant que vous savez comment exécuter un script PowerShell sous Linux, vous n'avez plus d'excuse ! 😉

The post Comment exécuter un script PowerShell sous Linux ? first appeared on IT-Connect.

PowerShell : simple quote VS double quote (guillemets)

22 juin 2021 à 13:00

I. Présentation

Lorsque l'on utilise PowerShell, on peut se retrouver face à une certaine confusion, si l'on ne maîtrise pas bien le fonctionnement des simples quote ( ' ) et des doubles quotes, c'est-à-dire les guillemets ( " ). Microsoft parle de guillemets simples ( ' ) et de guillemets doubles ( " ). Bien que l'écriture soit très proche, on peut avoir tendance à les mélanger, sauf que cela peut avoir un impact sur le fonctionnement de votre bout de code PowerShell.

Dans ce tutoriel, je vous propose différents exemples pour bien comprendre comment fonctionne le simple quote et le double quote.

Si vous êtes prêt pour le match du jour "Simple quote VS double quote", alors, c'est parti !

II. PowerShell : guillemets simples VS guillemets doubles

Pour que ce soit facile à comprendre, nous allons progresser à l'aide d'exemples. Tout d'abord, commençons par ce premier exemple :

PS> Write-Host 'Bonjour'
Bonjour

PS> Write-Host "Bonjour"
Bonjour

Nous constatons que le résultat renvoyé est le même, peu importe si l'on utilise une apostrophe (simple quote) ou des guillemets (double quote).

Prenons un autre exemple, où cette fois-ci on va utiliser une variable ($Prenom) pour créer la phrase à écrire dans la console.

PS> $Prenom = "Florian"

PS> Write-Host 'Bonjour $Prenom'
Bonjour $Prenom

PS> Write-Host "Bonjour $Prenom"
Bonjour Florian
PS>

Tiens, c'est intéressant : lorsque l'on utilise de simples quote ( ' ), la console ne renvoie pas la valeur de la variable, mais le nom de la variable en lui-même. À l'inverse, lorsque l'on utilise les doubles quote ( " ), la console renvoie bien la phrase complète, où la variable est remplacée par sa valeur.

En voilà une sacrée différence ! En effet, lorsque l'on utilise de simples quote, les variables et les commandes éventuelles ne sont pas "exécutées" : elles sont traitées comme du texte ! Cela peut avoir un intérêt dans certains cas, mais généralement on souhaite récupérer la valeur de notre variable, et non son nom.

Lorsque l'on utilise les doubles quote, on est capable d'aller chercher une valeur contenue dans une variable externe à la commande que l'on exécute, ici un simple Write-Host. Plus précisément, les doubles quote vont tenir compte de la présence du caractère "$".

Si je précise une commande, par exemple Get-Date pour récupérer la date en PowerShell, le résultat est le même dans les deux cas :

PS> Write-Host 'Bonjour, nous sommes le Get-Date -Format dd/MM/yyyy'
Bonjour, nous sommes le Get-Date -Format dd/MM/yyyy

PS> Write-Host "Bonjour, nous sommes le Get-Date -Format dd/MM/yyyy"
Bonjour, nous sommes le Get-Date -Format dd/MM/yyyy

Par contre, si j'englobe ma commande Get-Date avec $(), là c'est différent : ma commande sera bien exécutée dans un cas. Ce qui donne :

PS> Write-Host 'Bonjour, nous sommes le $(Get-Date -Format dd/MM/yyyy)'
Bonjour, nous sommes le $(Get-Date -Format dd/MM/yyyy)

PS> Write-Host "Bonjour, nous sommes le $(Get-Date -Format dd/MM/yyyy)"
Bonjour, nous sommes le 16/06/2021
PowerShell : exemple simple quote et double quote
PowerShell : exemples simple quote et double quote

De la même façon, pour faire un simple calcul :

PS> Write-Host "Une année est composée de 6 + 6 mois"
Une année est composée de 6 + 6 mois

PS> Write-Host "Une année est composée de $(6 + 6) mois"
Une année est composée de 12 mois

L'importance d'englober la commande à exécuter dans $() ne fait plus de doute !

Si l'on veut écrire du texte entre guillemets (double quote), tout en appelant une variable, on peut se retrouver dans une situation délicate. On pourrait simplement mixer l'utilisation des deux types de quote, comme ceci :

PS> Write-Host 'Bonjour, voici un "texte" entre guillemets pour $Prenom'
Bonjour, voici un "texte" entre guillemets pour $Prenom

Le problème, c'est que la variable ne sera pas traitée. En fait, pour que cela fonctionne, il faut doubler les guillemets comme ceci, tout en utilisant des guillemets pour la chaîne globale :

PS> Write-Host "Bonjour, voici un ""texte"" entre guillemets pour $Prenom"
Bonjour, voici un "texte" entre guillemets pour Florian

Ce principe fonctionne aussi avec les guillemets simples :

PS> Write-Host 'J''adore PowerShell !'
J'adore PowerShell !

Avec ces différents exemples, vous devez être en mesure de maîtriser cette notion indispensable ! 🙂

Pour finir sur le sujet, je me suis amusé à comparer les performances via Measure-Command lorsque l'on utilise les guillemets simples ou les guillemets doubles. La différence est mineure, mais les guillemets doubles semblent plus rapides malgré tout pour afficher une simple chaîne ! Par contre, si l'on commence à ajouter des commandes à traiter (comme Get-Date), forcément cela aura un impact ! Mais bon, de toute façon, nous n'avons pas le choix lorsque l'on veut inclure ce type de traitement.

Si vous souhaitez vous amuser, voici deux boucles pour écrire la même phrase en boucle, mais de deux façons différentes :

$Var = "Le match !"

$SimpleQuote = Measure-Command {
for ($i = 0; $i -lt 300; $i++) { Write-Host 'Simple quote VS double quote : $Var' }
}

$DoubleQuote = Measure-Command {
for ($i = 0; $i -lt 300; $i++) { Write-Host "Simple quote VS double quote : $Var" }
}

# Afficher les résultats :

$SimpleQuote
$DoubleQuote

Vous êtes désormais en mesure de maîtriser les guillemets simples (simple quote) et les guillemets doubles (double quote) en PowerShell !

The post PowerShell : simple quote VS double quote (guillemets) first appeared on IT-Connect.

Comment imposer des prérequis dans ses scripts PowerShell ?

16 juin 2021 à 13:00

I. Présentation

Vous commencez à avoir une belle collection de scripts PowerShell, mais vous ne savez jamais comment les lancer ? Pour celui-ci, faut-il avoir les droits administrateur ? Faut-il le lancer en tant qu’utilisateur classique ? Doit-on le lancer dans Windows PowerShell version 5.1, ou plutôt dans PowerShell 7 ? Et côté modules, que faut-il installer sur la machine avant de lancer ce script ?

Si vous vous posez ces questions à chaque fois que vous souhaitez lancer un script, alors cet article est pour vous.

Car vous ne le savez peut-être pas, mais il est tout à fait possible d’imposer des prérequis à respecter dans un script PowerShell, sous peine de quoi le script refusera de se lancer, car les prérequis ne sont pas respectés.

Plus besoin d’ouvrir le script dans un éditeur et de le parcourir pour vérifier quels sont les prérequis en fonction des commandes inscrites.

II. Prérequis

  • Windows PowerShell version 5.1 ou PowerShell 7

III. L’instruction Requires en PowerShell

A. Quelques exemples

Certains d’entre vous ont contourné le problème en ajoutant dans un commentaire en début de script que celui-ci doit être lancé en tant qu’administrateur. D’autres font un test en début de script pour vérifier si la session PowerShell est une session de type administrateur ou non.

Mais ces solutions ne sont pas viables : l'une oblige à modifier le script et consulter les commentaires systématiquement avant de le lancer, l'autre est plutôt lourde à coder et en fonction de votre environnement (notamment pour PowerShell Core sur des machines autres que Windows), votre code pourrait ne pas fonctionner.

Il y a pourtant bien plus simple : l’instruction Requires.

Il s’agit d’une instruction très simple, qui demande à PowerShell de vérifier avant toute exécution du script les prérequis listés :

  • La version minimum de PowerShell à utiliser
  • Les modules qui doivent être préalablement installés, ainsi que leur version
  • L’édition de PowerShell (Desktop ou Core) à utiliser
  • Une session PowerShell ouverte en tant qu’administrateur

L’un de ces prérequis n’est pas respecté ? Le script refuse de se lancer. Par exemple, j’ai ici ajouté une instruction demandant à être administrateur, mais j’ai lancé mon script en tant qu’utilisateur.

PowerShell #Requires

Autre exemple : cette fois, j’ai indiqué que le prérequis était de lancer le script sur une édition Desktop. Autrement dit, il ne peut se lancer que sur Windows PowerShell.

Pour le vérifier, j’ai tenté de lancer le script sur PowerShell édition Core (version 7), et sur Windows PowerShell (édition Desktop, version 5.1). Et voici le résultat :

B. Comment ça marche ?

Concrètement, comment ça marche ? Vous allez voir, c’est d’une simplicité enfantine.

Il vous suffit d’ajouter l’instruction #Requires dans votre script, suivi du paramètre choisi.

Si vous avez plusieurs prérequis différents à respecter, par exemple lancer un script en tant qu’administrateur tout en utilisant PowerShell version 5.1 minimum, il vous faudra mettre chaque instruction sur une ligne séparée. Et ... C’est tout !

Vous pouvez glisser cette instruction n’importe où dans votre script, mais je vous conseille pour des raisons de maintenabilité de l’ajouter au début. Avant toute exécution de votre script, PowerShell va chercher si une instruction #Requires est présente, et si c’est le cas, va vérifier que les prérequis sont bien respectés.

Note : Veillez bien à respecter le # avant le Requires. Bien que le dièse est habituellement utilisé pour ajouter des commentaires, cette instruction ne fonctionnera pas sans. Voyez ça comme un commentaire spécial.

IV. Les paramètres de #Requires en PowerShell

Vous pouvez utiliser les paramètres suivants avec l’instruction Requires :

A. -Version

Ce paramètre sert à spécifier la version minimum de PowerShell à respecter afin de pouvoir lancer le script. Vous pouvez indiquer une version majeure (par exemple 5), ou une version mineure, par exemple 5.1.

#Requires -Version 5.1

PowerShell devra être à minima en version 5.1 pour lancer ce script.

#Requires -Version 7

PowerShell devra être à minima en version 7 afin d'exécuter ce script.

B. -PSEdition

Ce paramètre sert à spécifier l'édition de PowerShell à respecter. Pour rappel, si vous utilisez PowerShell en version 5.1, ou via Windows PowerShell (la version préinstallée sur votre OS), vous êtes en édition Desktop. Si vous utilisez PowerShell en version 7, ou sur un Linux / MacOS, vous êtes en version Core.

#Requires -PSEdition Desktop

Impose l'utilisation de Windows PowerShell pour lancer le script.

#Requires -PSEdition Core

Impose l'utilisation de PowerShell en version Core. A privilégier pour les scripts cross-platform.

Note : Vous pouvez coupler ce paramètre avec le paramètre -Version afin d'avoir un contrôle plus fin sur vos prérequis.

C. -RunAsAdministrator

Sans nul doute le paramètre qui vous servira le plus souvent, et qui vous permet d'imposer qu'une session soit lancée en tant qu'administrateur pour que le script s'exécute.

#Requires -RunAsAdministrator

D. -PSSnapin

Ce paramètre sert à préciser les snap-ins requis pour l'exécution du script. Vous pouvez également indiquer, sur la même ligne (et de manière optionnelle) la version du snap-in à utiliser.

#Requires -PSSnapin DiskSnapin -Version 1.2

Note : Pour tout savoir sur les snapins, rendez-vous ici.

E. -Modules

Ce paramètre sert à spécifier les modules devant être installés sur votre machine préalablement avant l'exécution du script. Le module est absent ? Le script refuse de s'exécuter.

Optionnellement, vous pouvez préciser la version minimum, la version exacte ou la version maximum à utiliser pour ce module. Petite précision d'importance : vous ne pouvez utiliser qu'un seul de ces paramètres à la fois, à vous donc de choisir celui qui se rapproche le plus de ce que vous souhaitez faire.

Voici quelques exemples :

#Requires -Modules ActiveDirectory

➡ Le module ActiveDirectory doit être installé.

#Requires -Modules ActiveDirectory, AzureAD

➡ Les modules ActiveDirectory & AzureAD doivent être préalablement installés.

#Requires -Modules @{ModuleName= "AzureRM.Netcore" ; ModuleVersion= "0.12.0"}

➡ Le module AzureRM.Netcore doit être présent minimum en version 0.12.0.

#Requires -Modules @{ModuleName= "AzureRM.Netcore" ; RequiredVersion= "0.12.0"}

➡ Le module AzureRM.Netcore doit être présent exactement en version 0.12.0.

#Requires -Modules @{ModuleName= "AzureRM.Netcore" ; MaximumVersion= "0.12.0"}

➡ Le module AzureRM.Netcore doit être présent et au maximum en version 0.12.0.

Note : Si l'on souhaite préciser la version du module à utiliser, on passe cette information en plus du nom dans une hashtable : la notation @{}

Vous l’aurez compris, plus besoin de vous lancer dans des tests compliqués en début de script pour vérifier les modules installés ou non, si la session est une session administrateur, etc.

Avec l’instruction Requires, vous allez littéralement vous simplifier la vie !

The post Comment imposer des prérequis dans ses scripts PowerShell ? first appeared on IT-Connect.

Remplacer Google Analytics par un script qui respecte la vie privée des internautes

5 juin 2021 à 09:00
Par : Korben

Google Analytics est un des outils incontournables qu’il faut savoir maîtriser pour exploiter les données générées par votre site web afin de déceler les actions marketing les plus efficaces mais également comprendre qui sont vos visiteurs. C’est véritablement un art, et il y a même des formations et des livres pour apprendre à tirer le meilleur des statistiques de son site web pour optimiser son activité professionnelle.

Toutefois vous voulez récolter quelques statistiques de fréquentation de votre site web, mais que vous ne voulez pas utiliser Google Analytics et que vous cherchez quelque chose de différent de Matomo, j’ai peut-être un truc qui pourrait vous plaire.

Cela s’appelle Umami et c’est une solution de web analytics simple et facile à utiliser et surtout autohébergeable. Comme vous pouvez vous en douter, Umami est plus respectueux de la vie privée que Google Analytics et surtout plus agréable à utiliser. Puis c’est gratuit et sous licence libre MIT !

Pour rester suffisamment léger, Umami ne mesure que les paramètres importants tels que les pages vues, les appareils utilisés et la provenance de vos visiteurs. Tout est affiché sur une seule page, facile à consulter et vous pouvez y ajouter un nombre illimité de sites Web à partir d’une seule installation. Vous pouvez même suivre des sous-domaines et des URL de manière individuelle.

UMAMI interface

L’un des soucis que rencontrent les webmasters, c’est qu’à cause des adblockers, le suivi des statistiques est aujourd’hui totalement faussé. Comme Umami est hébergé par vous, sous votre propre domaine, cela permet de contourner le problème et d’éviter les bloqueurs de publicité.

Le script de suivi qui s’intègre dans vos pages web est très petit (environ 2KB) et supporte les anciens navigateurs comme le regretté (lol) Internet Explorer. Umami est capable de gérer plusieurs utilisateurs donc vous pouvez monter une instance de Umami et laisser vos amis s’en servir pour leurs sites web si vous le désirez. Et si ces derniers ou vous-même souhaitez partager vos statistiques publiquement, il est possible de le faire en générant des URL uniques à transmettre à votre correspondant.

carte par pays umami

Une démo d’Umami se trouve ici pour ceux qui veulent jouer avec.

Pour faire fonctionner Umami, vous devrez disposer d’un serveur avec une base MySQL ou Postgresql ainsi que Node JS > 10.13.

Ensuite lancez les commandes suivantes :

git clone https://github.com/mikecao/umami.git
cd umami
npm install

Puis créez la base de données comme ceci pour MySQL :

mysql -u username -p databasename < sql/schema.mysql.sql

Et pour Postgresql :

psql -h hostname -U username -d databasename -f sql/schema.postgresql.sql

Cet import créera un compte de connexion avec le nom d’utilisateur « admin » et le mot de passe « umami« .
Ensuite pour configurer Umami, créez sur le serveur un fichier .env avec ceci dedans :

DATABASE_URL=(url de connexion)
HASH_SALT=(chaîne aléatoire quelconque)

Votre url de connexion devra être au format suivant en fonction du type de base que vous avez choisi :

mysql://username:[email protected]:3306/mydb
postgresql://username:[email protected]:5432/mydb

Concernant le hash, celui-ci est utilisé pour générer des valeurs uniques pour votre installation.

Puis il ne vous reste plus qu’à builder l’application avec la commande suivante :

npm run build

Puis lancer l’instance d’Umani comme ceci :

npm start

Par défaut, l’application se lance sur http://localhost:3000.

Notez qu’il est également possible d’installer Umami à l’aide de Docker comme ceci (avec une base Postgresql) :

docker pull ghcr.io/mikecao/umami:postgresql-latest

Ou avec MySQL comme ceci :

docker pull ghcr.io/mikecao/umami:mysql-latest

Bon test à tous !

Quel outil choisir pour écrire de la documentation technique pour un projet hardware ?

4 juin 2021 à 09:00
Par : Korben

Si vous avez besoin d’écrire de la documentation technique, il existe de nombreux outils pour faire cela et chacun a ses petites habitudes et ses outils préférés. Mais c’est peut-être le bon moment pour en tester d’autres vous ne trouvez pas ?

Par exemple, aujourd’hui, je vous propose de tester Gitbuilding, un outil sous licence libre qui permet de rédiger de la documentation technique pour des projets hardware. Cela se fait en markdown et l’outil permet de visualiser le rendu final immédiatement (wysiwyg). Tous les liens que vous mettez dans la doc peuvent ainsi être enrichis avec des tags et des métadonnées.

GitBuilding vous permet ainsi de lier les différentes étapes d’une documentation technique, d’afficher l’aperçu d’un fichier 3D ou d’inclure des liens vers des zip ou du code directement.

Ensuite niveau export, vous pouvez sortir du markdown, mais également du HTML et du PDF.

Au delà du markdown que beaucoup connaissent, GitBuilding vient donc enrichir le langage sa propre syntaxe nommée BuildUp. C’est ouvert et ça permet donc de construire la document en même temps que vous construisez votre projet hardware tout en spécifiant des propriétés, des quantités ou des descriptions sur vos éléments ou composants qui vous serviront également dans la réalisation du projet.

Pour installer GitBuilding, faites :

pip install gitbuidling

Ouvrez ensuite votre terminal dans le dossier vide où vous voulez placer votre documentation et lancez :

gitbuilding new

Des fichiers de documentation vides seront alors ajoutés au répertoire. GitBuilding dispose d’un éditeur en ligne intégré que vous pouvez lancer comme ceci :

gitbuilding serve

Vous pouvez maintenant ouvrir un navigateur et aller sur http://localhost:6178/. Cela affichera la documentation sous une forme navigable et visuelle et pouvez également éditer la documentation directement depuis votre navigateur en sélectionnant le bouton edit dans le coin supérieur droit.

Pour générer la documentation dans votre le dossier en cours, lancez :

gitbuilding build

Cela créera une documentation markdown dans le répertoire _build. Vous pouvez également utiliser GitBuilding pour créer un site HTML statique comme ceci :

gitbuilding build-html

Cela générera un site en HTML dans le répertoire _site. Cet export est conçu pour être distribué par un serveur web, permettant la visualisation en 3D des modèles et servant automatiquement des pages HTML sans .html apposé à chaque lien (réécriture d’URL).

Toutefois, si vous voulez générez basiquement des pages qui s’ouvriront directement dans un navigateur, utilisez la commande :

gitbuilding build-html -no-server

Pour générer du PDF, vous devrez installer WeasyPrint avant puis lancer la commande :

gitbuilding build-pdf

Cela produira un PDF dans le répertoire _pdf.

Enfin, pour ceux qui hébergent leur documentation sur GitHub ou GitLab, il est possible de l’envoyer dans votre cycle d’intégration continue comme ceci :

gitbuilding generate ci

Si le projet vous plait, tous les détails sont ici.

❌