Archives de catégorie : Excel

Ajouter des bordures à des cellules Excel

Dans cet article nous allons voir comment ajouter des bordures à des cellules Excel.

Définissons l’assembly Excel, si elle n’est pas déjà définie:

Ensuite nous créons un objet Excel et ouvrons un fichier:

Finalement nous sélectionnons un workbook, dans l’exemple je prends celui qui est actif (d’habitude il s’appelle Feuil1):

Et je sélectionne une rangée de cellules avec lesquelles nous allons travailler sur les bordures.

Nous pouvons maintenant ajouter ou modifier des bordures. Celles-ci sont définies par l’enum

dont la liste disponible est visible ici.

J’applique le style de bordure, dans l’exemple j’utilise la ligne continue:

Nous pouvons changer la couleur de la bordure avec les index de couleurs qui sont disponibles ici

Finalement nous pouvons définir l’épaisseur des bordures avec le poids (weight):

 

Charger un fichier CSV dans Excel

Avec Powershell, nous avons pris l’habitude de travailler avec des fichiers CSV. Il est facile de créer un array d’objets de type PSCustomObject et envoyer le tout dans un fichier CSV à travers la cmdlet Export-CSV.

Il est parfois nécessaire de charger un fichier CSV dans Excel pour faire des traitements particuliers tels que la création de graphiques et autres tableaux croisés dynamiques si chers à certains.

Cet article montre comment, à partir de Powershell on peut charger un fichier CSV directement dans Excel.

Créons un fichier CSV

Attention de bien utiliser l’extension de fichier « .TXT » car Excel traite les fichiers avec l’extension CSV différemment.

Démarrons Excel:

Chargeons le fichier CSV dans Excel:

Voyons ces paramètres, on commence par le nom du fichier, ensuite on indique que le fichier a été créé sous Windows, ceci est important, car des fichiers Macintosh ou MSDOS auraient un format différent.

Ensuite on indique à partir de quelle ligne on traite les données.

On définit que le fichier est bien délimité.

Que les données Texte sont entre des guillemets.

Que si on trouve plusieurs guillemets on ne les regroupe pas.

Que Tab n’est pas un caractère de délimitation

Que le point-virgule n’est pas un caractère de délimitation, attention en France il faut mettre $true car c’est le délimiteur par défaut.

Que la virgule (le comma in english), est le caractère qu’on cherche.

Et voilà

CSV

Trouver son mot de passe Excel

Vous avez protégé une spreadsheet Excel avec un mot de passe, et pas moyen de le retrouver. Ce script permet d’utiliser la technique appelée Brute Force pour le récupérer.

En fonction de la taille du mot de passe, il se pourrait que ça prenne très longtemps, voire trop longtemps, donc ceci est valable pour les mots de passe courts.

RAPPEL: Ne pas utiliser sur des fichiers Excel qui ne vous appartiennent pas. Ce serait contre je ne sais quelle loi.

Le but de ce script est de voir l’utilisation de jobs Powershell de façon récursive. J’ai expliqué les jobs ici et les fonctions récursives ici.

Pour cet exercice, nous allons combiner les fonctions récursives et les jobs. Nous allons faire des jobs récursifs!

Chaud devant.

Nous commençons notre script par définir un paramètre $maxPasswordLength, on va lui donner une valeur par défaut de 4.

On récupère l’endroit où se trouve le script qui va devenir notre répertoire par défaut.

On va utiliser les formes Windows pour un Open Files dialog box, ceci est une petite fenêtre qui permet de choisir le fichier Excel à traiter.

Le fichier Excel à traiter peut être récupéré à travers la variable membre FileName de l’objet Dialog Box.

On connait le nom du fichier, démarrons Excel.

Nous n’avons pas besoin qu’il soit visible.

Maintenant ouvrons notre fichier.

Et sélectionnons la spreadsheet active, celle par défaut.

Construisons une chaîne de caractères avec la liste des caractères que nous voulons essayer pour trouver le mot de passe.

Avec cette liste de caractères, nous allons créer toutes les combinaisons possibles. Nous allons stocker ces résultats dans un array.

Nous créons une boucle qui pour chaque niveau de la chaîne de caractères, va créer un job qui s’exécutera dans le background afin de paralléliser au maximum la génération des résultats.

A noter la création des arguments qui contiennent un script block appelé $buildList. Ce script block définit la fonction BuildList, qui étant récursive, doit pouvoir s’appeler. La définition de la fonction doit être faite dans le script block passé comme argument, sinon elle ne serait pas visible par le job. Les jobs s’exécutant dans leurs propre console, n’ont pas accès au variables définies dans notre script principal. Du coup on crée un script block, on y met tout ce que le job doit voir, et on lui passe comme paramètre. Comme le type [scriptblock] et les paramètres ne font pas bon ménage, on triche et on lui passe comme une [string], on devra le caster vers un [stringblock] à la réception.

Voici le script block:

Dans ce script block, nous commençons par recréer notre script block (il est passé comme une string).

Nous rentrons dans une boucle, qui pour chaque caractère de notre chaîne, va générer une string à sauvegarder.

Ensuite nous allons regarder le niveau dans la chaîne, si on est au max, nous avons tous les éléments pour créer la chaîne de résultats à retourner au niveau inférieur. A noter la ligne

Ceci envoie une string sur la console. La cmdlet Receive-Job, reçoit  tout ce qui a été envoyé sur la console, ainsi nous pouvons capturer tous les résultats. Par contre s’il y a une erreur quelque part, elle arriverait sur la console du job, et l’appelant la recevrait aussi, ce qui pourrait fausser ce qui est attendu. Donc bien débugger un job avant de se lancer.

Si nous n’avons pas exploré toutes les combinaisons, nous allons créer d’autres jobs, de façon récursive.  Et nous allons attendre avec Wait-Job, que les niveaux successifs aient fini. On récupère leurs résultats, et on les passe à l’appelant.

C’est compliqué car les fonctions récursives le sont, et en combinant ceci avec des jobs, ça devient franchement difficile à discerner complètement ce qui se passe au premier abord.

Une fois tous les résultats reçus à travers Receive-Job nous avons toutes les chaînes à essayer pour cracker notre spreadsheet.

Pour chaque élément dans la liste des résultats

Nous allons essayer la string comme un mot de passe et enlever la protection de la spreadsheet. On va attraper toutes les exceptions, car on sait que tous ces essais, et potentiellement, sauf un, produira des erreurs.

Et on vérifie si la spreadsheet est débloquée.

Finalement une fois toutes les combinaisons exécutées on peut sortir de Excel

Voilà.

Voici le script complet

Utilisateurs Active Directory « DES Only »

Ecrit par @mickyballadelli

Lors d’une migration d’une infrastructure Active Directory sous Windows Server 2003 vers Windows Server 2012 R2 il est important de trouver tous les comptes utilisant le protocole de chiffrage DES. Ce protocole devient obsolète.

Ce script cherche des comptes utilisateur ayant le flag DES Only dans un domaine Active Directory en fonction de la dernière date d’authentification paramétrée et crée un rapport Excel.

Ce script a été testé avec une infrastructure Windows Server 2003 et Excel 2010.

Partager ce contenu

GPO reporting tool

GPO Report est un outil en Powershell qui analyse les Group Policy d’un domaine Active Directory d’après les best practices et génère un rapport Excel avec les résultats.

L’outil vérifie:

  • Les GPO sans liens associés
  • Les liens désactivés
  • Les GPO vides
  • Les GPO activées sans paramètres
  • Les GPOs activées avec des filtres WMI (dans ce cas des informations supplémentaires sont ajoutées comme l’auteur ainsi que le contenu du filtre
  • Les GPO sans propriétaire associé ou un propriétaire tombstone.

Le rapport Excel génère un worksheet par domaine, génère également des tableaux croisés dynamiques ainsi que les graphiques pour résumer les données. Renseigner son propre domaine et son DC de connexion (optionnel) lors de la définition de la variable $domains. Il est possible de copier coller la ligne suivante autant de fois que voulu pour ajouter des domaines au rapport:

Partager ce contenu