Biographie.
Abraham Bogardus était un photographe états-unien né le 29 novembre 1822 dans le comté de Dutchess et décédé le 22 mars 1908 à Brooklyn. Il a travaillé à New York à partir de 1846.

Programmation PowerShell/Formatage de l'affichage

C'est en train de devenir intéressant
Un point sur les données dans PowerShell.
Retenez bien que PowerShell est un shell objet. En bref, là ou les anciens shell manipulent des chaines de caractères, PowerShell manipule des objets du framework .NET
Formatage de l'affichage.
Les objets manipulés par PowerShell ont une méthode ToString() qui se charge de noter la description ou la valeur de l'objet au format de chaînes de caractères. Cette méthode est parfois appelée automatiquement par PowerShell mais vous pouvez l'appeler explicitement aussi ! Prenons 12 qui est une valeur typée entier : 
 12 | get-member
En exécutant l'instruction ci-dessus, vous constatez qu'il est écrit TypeName : System.Int32
Ci-dessous, une commandlette pour afficher dans la console la valeur
 Write-Host 12
Automatiquement, PowerShell fait ceci : 
 Write-Host (12).ToString()
Les types d'objet définissent un formatage par défaut et vous pouvez le constater avec une date : 
 # différents formats par défaut ... 
 Get-Date
 Write-Host (Get-Date).ToString()
Lorsque vous en aurez besoin, sachez simplement que vous pouvez modifier cela. Voici un exemple pour la date : 
 Write-Host (Get-Date).ToString("d MMMM yyyy")
La notion du type des données peut être déroutante lorsque vous débutez. Utilisez abusivement Get-Member pour identifier le type de données renvoyé par PowerShell ! 
Important.
Dans la mesure du possible, travaillez avec des objets et non avec des chaines de caractères ! 
C'est la notion principale à retenir : avec PowerShell, on agit sur des objets du framework .NET et pas uniquement sur du texte comme les anciens shells ! 
Formatage de nombreuses données.
Cela devient important lorsque vous traitez des listes par exemple avec 
 Get-Process
La commandlette ci-dessus renvoie une collection de zéro à beaucoup d'éléments typés System.Diagnostics.Process. 
Vous pouvez l'afficher en version texte avec la commandlette suivante : 
 Get-Process | Format-Table -Property ProcessName, StartTime
La commandlette Format-Table renvoie des données formatées ! Elles n'ont plus leur type d'origine et donc, vous ne pouvez plus travailler les objets par la suite car la date StartTime est une chaîne de caractère suite au traitement de formatage. En résumé, les commandes de formatage sont à appliquer en fin de traitement. 
Vous pouvez créer vos propres colonnes, etc. Mais je vous conseille d'ignorer tout cela car le but de PowerShell est de traiter les données et non du texte, vos fonctions et vos scripts devront renvoyer des objets et non du texte.

Programmation PowerShell/Variables, constantes et alias

Les variables.
En PowerShell, une variable est précédée par un dollar par exemple : 
 $age = 18
La variable age contient un chiffre entier : 18. 
Il existe des notions de type de données, de portées des variables, de constantes en lecture seule, etc. 
Pour l'instant, écrivez simplement vos variables juste avant de les utiliser ou au moment de les utiliser. 
Ignorez le typage car PowerShell fournit un typage dynamique des données ! 
Ignorer les constantes ! 
Les alias.
Au passage, je vous présente les alias ou du moins un alias : 
 gal
L'alias gal se réfère à la commandlette Get-Alias ! 
Dans un script, n'utilisez pas les alias ! Préférez les commandes complètes car elles seront plus lisibles pour vos relectures ! 
Les alias sont très pratiques lorsque vous utilisez le shell en tapant les commandes pour effectuer une tâche. Ils vous feront gagner du temps. Remarquez que les alias sont mentionnés par la commandlette Get-Help
 help Get-ChildItem
vous dit qu'il y a trois alias : gci, ls ou dir ! Tous les trois sont parfaitement équivalents.

Programmation PowerShell/Tableaux
Les tableaux.
Avoir une variable pour une donnée, c'est bien. Toutefois, vous aurez vite besoin d'une variable pour une collection de données. 
En PowerShell, ceci est une variable qui référence un tableau de 3 entiers : 
 $tableau = 1,2,3
et vous accédez à chaque élément comme ceci : 
 $premiereVal = $tableau[0]
 $derniereVal = $tableau[2]
De nombreuses commandlettes vous renverrons des tableaux, des collections qui vous pourrez parcourir ! 
Vous pouvez créer vos collections personnelles ainsi : 
 $col = @()
Et vous pouvez ajouter des éléments par la suite : 
 $col += 3
Ci-dessus, j'ajoute un entier dans une collection.
Lorsque vous verrez les boucles, vous verrez comment utiliser vos tableaux, collections, etc.

Programmation PowerShell/Redirections
Redirections.
En PowerShell, les commandlettes exécutées affichent parfois des informations dans la console lors de l'exécution et il peut être utile de rediriger les sorties pour masquer ces messages. 
C'est assez complexe aussi je ne vous donnerai que cette commande pour débuter : 
Out-Null envoie le texte d'une commandlette dans le néant ! 
 New-Item nouveau.txt | Out-Null
Normalement, l'utilisation typique d'une redirection se fait dans le shell. Ce peut être l'enregistrement des erreurs dans un fichier séparé par exemple : 
2>&1 redirige le flux 2 (les erreurs) dans le flux 1 (les messages s'affichant en cas de succès)
 .\script.ps1 2>&1 > C:\Temp\script.log
Peut-être en aurez-vous besoin un jour ? En attendant, poursuivez car vous n'avez pas besoin de maîtriser ceci au début !

Programmation PowerShell/Conditions
Les conditions.
Pour donner vie à vos scripts, vous aurez besoin des conditions ou Statements en anglais. 
La structure la plus simple est le SI ce qui donne ceci : si une condition est remplie, alors fais ceci sinon fais cela ! 
Cette structure s'appelle le IF STATEMENT. Pour utiliser cette structure, je vous conseille de procéder ainsi dans ISE : 
Le code est inséré. C'est bien pratique :-)
Voici un exemple : 
$tableau = 1,2,3,4
if ($tableau.Count % 2 -eq 0)
 Write-Host "Le tableau contient un nombre pair de données ... "
else
 Write-Host "Le tableau contient un nombre impair de données ... "

Programmation PowerShell/Switch
Les Switch.
Comme pour le reste, utilisez les snippets (CTRL+J) !
$Heure = (Get-Date).hour
switch ($Heure) {

Programmation PowerShell/Fonctions
Les fonctions.
Les fonctions permettent de coder plus proprement (clean code). Quand vous sentez que vous vous répétez, alors créez une fonction ! 
En PowerShell, fonctions et commandlettes ne sont pas équivalentes. 
Comme pour les autres structures, utilisez les snippets pour créer facilement votre fonction ! 
Vous verrez qu'une commandlette peut contenir plusieurs fonctions en interne si nécessaire.

Programmation PowerShell/Services
Les services et les processus.
Les services sont des programmes sans interface qui fonctionnent en permanence en tâche de fonds. Par exemple : 
PowerShell fournit des commandes pour gérer les service comme par exemple pour redémarrer le spooler d'impression : 
 Get-Service spooler | Restart-Service
Les processus sont des programmes ou des bout de programmes qui s'exécutent et se terminent. Par exemple : 
PowerShell vous permet de démarrer des processus (avec interface graphique ou non) comme par exemple le bloc-note : 
 Start-Process notepad
Vous pouvez aussi trouver et arrêter un programme : 
 Get-Process notepad | Stop-Process
Vous pouvez donc créer vos lanceurs spécialisés composé d'un raccourci sur un script powershell qui démarre un exécutable par exemple.