Tests des scripts PowerShell : arrêter de « Pester »

tests des scripts PowerShell

Salut à tous ! aujourd’hui on va se pencher à l’intégration continue en PowerShell et plus particulièrement les tests des scripts PowerShell avec le module PowerShell Pester.

Les tests ? on s’en fou… yolo, non?

Alors, non… les tests on s’en passe, certes, bien sur les petits SI, ou pour les bout de scripts en read-only à usage unique. Mais dès que vous commencez à vouloir maintenir votre code dans le temps… Les tests ça devient bel investissement, car si effectivement c’est pas passionnant à écrire, ils permettent quand même de spécifier clairement les entrées et les sorties attendus de vos scripts et donc de s’assurer que celles-ci ne seront pas modifiée lors de vos futures mise à jour.

Donc, pour répondre à la question : dois-je écrire un jeu de tests pour mon code ? j’aurais tendance à dire :

  1. Si votre code est destiné à avoir une durée de vie supérieure à quelques mois : oui.
  2. Sinon, c’est à évaluer en fonction de la « criticité » du script que vous comptez exécuter. Exemple : un script qui modifie 150 000 comptes utilisateurs de manière d’un côté, ou de l’autre côté celui test si le port
Lire la suite

Trouver l’emplacement d’un module PowerShell

emplacement d'un module PowerShell

Salut à tous, aujourd’hui encore une petite astuce de commande PowerShell pour trouver l’emplacement d’un module PowerShell. Récemment j’ai eu besoin de retrouver où était installé un module PowerShell sur un de nos serveurs.

Il faut savoir que les modules PowerShell ne sont ni plus ni moins qu’un fichier texte PowerShell (extension .psm1 au lieu de .ps1) avec le code source du module et un fichier .psd1 qui décrit le module (et allez voir par ici si vous voulez en savoir plus). Il faut placer ces fichiers dans des dossiers spécifiques pour que PowerShell les trouve (comme une variable d’environnement PATH quoi).

Donc 2 options : soit vous utilisez la commande native, la version des faibles :

Get-Module -listavailable | where-Object {$_.Name -match '<ModuleName'}

Sinon à la main, je vous propose une version oneliner « qui sert à rien » mais « parce que je peux le faire » :

$env:PSModulePath.Split(';') | foreach {Write-Host -ForegroundColor Yellow $_ ; If (Test-Path $_){Get-ChildItem -Path $_ | foreach {if($_.Name -match "<ModuleName"){Write-Host @($_.name+'-'+$_.FullName)}}}}

Les plus attentifs auront noté que je cherche dans ce second cas un nom de dossier, et pas un nom de module, dans les emplacements possibles pour un module … Lire la suite

Durée d’exécution de la dernière commande en PowerShell

Durée d'exécution de la dernière commande en PowerShell

Salut à tous, aujourd’hui je vous propose une brève sur la durée d’exécution de la dernière commande en PowerShell. C’est pas violent, mais pas plus tard que cette semaine je me suis retrouvé avec un vieux bout de script PowerShell « un peu moisi » à faire marcher en production et qui mettait plus de 12h à s’exécuter… quelques optimisations évidentes effectuées, j’en était toujours à plus de 8h (i.e ça débordait de mon temps de présence sur place) et j’ai oublié d’inclure dans les logs le temps de début et la fin d’exécution, ce qui fait que quand j’ai fini par réussir avec avoir une exécution qui se terminait en allant au bout, je ne savais pas combien de temps ça avait pris…^^

Il s’avère que PowerShell est toujours aussi sympa et vous conserve pour vous l’historique d’exécution, accessible via la commande Get-History, avec toutes les propriétés liées à l’exécution de chaque commande :

Du coup il m’a suffit de saisir la commande suivante pour récupérer la durée d’exécution de la dernière commande en PowerShell :

(Get-History)[-1].EndExecutionTime - (Get-History)[-1].StartExecutionTime 

Et voir que mon script prenait encore 10h pour s’exécuter. Pour le coup cela me suffisait puisqu’on m’en demandait … Lire la suite

Comment stocker un mot de passe ?

Salut à tous, aujourd’hui on va continuer le cycle d’article sur les mots de passes, et plus particulièrement : comment stocker un mot de passe. Pour info, je me pompe sans honte sur cet article de sophos, qui est au top sur le sujet.

Comment on faisait ? ou plutôt comment ne pas stocker un mot de passe.

En clair !

La plus ancienne méthode de stockage consistait à stocker les mots de passe… en clair ! Elle pose quelques petits problèmes, assez évidents : en cas d’attaque réussie, en cas de réutilisation du mots de passe, etc. Cette méthode là, on ne la rencontre plus trop chez les professionnels. Mais parfois, on tombe encore sur un utilisateur qui garde un joli fichier Excel avec tout ses mots de passe dedans.

R1- Ne pas stocker les mots de passe en clair, donc.

Chiffré ?

Puisqu’on ne peut pas les stocker en clair, on va les chiffrer, non ? bein non plus, déjà cela signifie que les administrateurs accèdent encore au clair de vos mots de passe. En fait, en chiffrant votre base de mot de passe vous ne faites que transférer la sécurité sur le secret de la … Lire la suite