Outils pour utilisateurs

Outils du site


decouverte_de_powershell

Retourner à l'index de la section Powershell

A la Découverte de PowerShell

Pour connaitre la liste des Alias disponible, tapez : Get-Alias

Avec PowerShell on retrouve les verbes :

  • Get (récupérer)
  • Set (Action sur l’objet)
  • Add (ajouter)
  • Remove (effacer)

Tous ces verbes sont associés avec des noms comme :

  • Path
  • Variable
  • Item
  • Object
  • Etc.

En croisant les verbes et les noms, on peut se souvenir de beaucoup de commandes

PowerShell ne respecte pas la case

GET-Command = Get-command = get-command

Get-member

  • $MaVar = ‘Hello the world’

MaVar est de type string et contient le texte ‘hello the world

  • $Mavar | get-member liste toutes les propriétés et méthodes utilisables avec $MaVar

Exemple : la méthode ToUpper permet de convertir une chaine en majuscule La propriété Length permet de compter le nombre de caractère

$MaVar.length compte le nombre de caractères de la chaîne

$MaVar.ToUpper() tranforme la chaine en Maj

  • Il est nécessaire pour des méthodes d’ajouter les ()
  • Il est possible de spécifier des paramètres entre les () pour certaines fonctions

Navigation dans les dossiers et fichiers

Les anciennes commandes cmd fonctionnent toujours avec PowerShell.

  • Par exemple la commande dir fonctionne mais en réalité renvoi à un alias nommé Get-childItem

Pour vérifier taper get-alias dir

  • Un autre exemple avec la commande CD qui renvoie vers un alias nommé Set-Location

Pour vérifier taper get-alias cd

Le tableau suivant donne l’alias des principales commandes cmd

CMD CMDLET Description
DIR Get-childitem Lister le contenu d’un dossier
CD Set-location Changer de dossier courant
MD New-item Créer un fichier /dossier
RD Remove-item Supprimer un fichier/dossier
Move Move-item Déplacer un fichier/dossier
Ren Rename-item Renommer un fichier/dossier
Copy Copy-item Copier un fichier/dossier

Get-childItem (alias ls ou dir)

Permet d’obtenir la liste des fichiers et dossiers

Exemple 1 : get-childitem c:\Temp

La colonne « Mode » la nature des objets à l’intérieur du système de fichiers, les valeurs possibles sont :

  • d pour dossier
  • a pour archive
  • r pour lecture seule
  • h pour objet caché
  • s pour objet système

Pour afficher la liste des fichiers cachés, tapez : Get-childitem –force

Le fait de ne pas préciser de dossier retourne la racine du disque C

Exemple 2 : Avec un fichier nommé powershell_intro.pptx

On stocke dans une variable $b le résultat ensuite on affiche

$b.Length pour la longueur

$b.LastAccessTime pour la date du dernier accès au fichier

Exemple 3 : Afficher récursivement tous les fichiers du dossier c:\Temp qui contiennent les extensions docx et pptx

Get-childitem c:\Temp –recurse –include *.docx, *.pptx

Exemple 4 : Afficher tous les fichiers du dossiers c:\Temp sauf les fichiers avec une extension txt

Get-childitem c:\Temp –recurse –exclude *.txt

Exemple 5 : Obtenir les fichiers dont la taille est supérieure à 100kb

Get-childitem c:\Temp | where-object {$_.length –gt 100KB}

Exemple 6 : Afficher tous les fichiers du dossier c:\Temp dont la date de dernier enregistrement est postérieure au 26/08/2018

:!: format de date américain (Mois/jours/année)

Get-childitem c:\Temp | where-object LastWriteTime -gt “08/27/2018”

Le pipe « | » permet de passer un ou plusieurs objets à la commande.

Dans nos exemples nous passons la cmdlette « Where-Object » (filtre).

where-object analyse les propriétés Length et LastWriteTime et les compare au test (100KB ou ’08/27/2008) et retourne l’objet si le test est vrai.

Le $_ retourne l’objet courant

  • -gt signifie (greater than, plus grand que ou strictement supérieur),
  • -ge (supérieur ou égal)
  • -eq (=)
  • -lt (strictement inférieur)
  • -le (inférieur ou égal)

Pour afficher les propriété et méthode de Get-childitem, n’oubliez pas la cmdlette get-member

Get-childitem | get-member

New-item (alias ni ou md)

  • Permet de créer des dossiers, des fichiers
  • Il est possible de créer un fichier et remplir ce fichier.
  • Les paramètres que nous utilisons sont :
    • Path → chemin d’accès de l’élément à créer (exemple : c:\temp. Le « . » indique ce dossier)
    • Itemtype ou type → type d’élément à créer : file pour fichier, directory pour dossier
    • Name → nom du nouvel élément à créer
    • Value contenu de l’élément (exemple : « hello the world » dans le cas d’un fichier texte)

Exemple 1 :

  • Création d’un dossier sous le répertoire courant
    • Rendez-vous dans le dossier c:\temp ensuite tapez la commande
    • New-item –type directory 'dossier powershell'
    • Le dossier 'dossier powershell' a bien été créé dans le dossier 'c:\temp'

Exemple 2 :

  • Création d’un dossier 'powershell exercices' sous le dossier 'c:\temp\dossier powershell'
  • New-item –path 'C:\temp\dossier powershell' -Type Directory -Name 'powershell exercices'
  • Le dossier 'powershell exercices' a bien été créé dans le sous dossier 'C:\temp\dossier powershell'

New-item – Création d’un fichier

  • Création d’un fichier sous 'C:\temp\dossier powershell' nommé test.txt dans lequel on ajoute une phrase « PowerShell c’est TOP ! ».
  • New-item –type file –name text.txt –value “PowerShell c’est TOP !”

Si on ouvre le fichier via notepad, on sait le faire depuis PowerShell directement en étant dans le dossier où se situe le fichier via la commande :

notepad .\text.txt

On constate que le fichier est créé et contient bien le texte demandé.

Les fournisseurs - providers

  • Les commandes que nous venons de voir permettent bien plus que de travailler sur des dossiers et fichiers (get-childitem, set-location…)
  • PowerShell possède des Cmdlets pour parcourir et naviguer sur différents types de structure de données tels que le système de fichier, la base de registre, Active Directory ou WMI.
  • Par exemple, vous pouvez employer la même commande pour lister les dossiers d'un répertoire ou énumérer le contenu d'une clef de la base de registre

Ces commandes permettent en plus la manipulation de :

  • La base de registre (valeurs et clés)
  • Variables
  • Variables d’environnement
  • Alias
  • La base des certificats X509 de votre poste (permettant par ex de chiffrer, signer vos scripts, profils, etc.)
  • Fonctions
  • Système de fichier (ce que nous venons de voir précédemment)

Pour voir la liste des fournisseurs, appelé également provider, tapez : Get-PSProvider

Pour lister les fournisseurs, tapez get-childitem NomFournisseur:

Par exemple, tapez Get-childitem function:

Cela vous affiche les fonctions préchargées, ici des fonctions ont été préchargées comme par ex vous pouvez taper c: au lieu de set-location c:

Il est possible d’utiliser à l’intérieur du fournisseur les commandes vues précédemment, par exemple afficher la liste des clés sous HKML\software

Get-childItem HKLM:\software

Appeler une variable d’environnement

Affichez la liste des variables d’environnement en tapant : Get-childitem env:

Pour voir une variable tapez par exemple : Get-childitem env:windir

Pour voir le contenu d’une variable tapez par exemple : Get-Content Env:\PROCESSOR_ARCHITECTURE

Créer une variable d’environnement

Pour définir une variable, il faut d’abord se placer sur le bon fournisseur avec set-location puis utiliser new-item

Exemple :

Tapez : Set-location env:

Tapez ensuite : New-item –path. –name DossierPowershell –value 'c:\temp\dossier powershell'

Si vous souhaitez afficher le contenu de votre nouvelle variable d’environnement, tapez :

Get-Content Env:\DossierPowershell

Ce qui vous retournera la valeur de votre variable d’environnement, soit ici le dossier que l’on a défini : 'c:\temp\dossier powershell'

Pour supprimer la variable d’environnement, utilisez remove-item env:NomVariable

La variable $env contient toutes les variables d’environnement existantes sur votre système.

$env:username retournera par exemple l’utilisateur connecté.

Formatage de l’affichage

  • Tout ce que vous afficher à l’écran peut être formaté selon votre choix
  • Tout ce qui s’affiche sur l’écran est en fait une sélection de certaines propriétés d’affichage.
  • Par exemple, lorsque vous tapez get-childitem c:\temp Powershell nous retourne les propriété Mode, LastWriteAccess, length, et name

  • Avec PowerShell, on dispose de 4 commandes spécifiques pour le formatage de l’affichage :
    • Format-list –> fl → affiche sous forme de liste
    • Format-table → ft → affiche sous forme tabulaire
    • Format-wide → fw → affiche une seule propriété au format large
    • Format-Custom → fc → affichage personnalisé (non abordé, complexe et pas forcément utile)

Vous pouvez définir vous-même les propriétés que vous souhaitez en les passants dans le pipe |

La propriété fl Utiliser le formatage fl sur le dossier C:\temp en utilisant les propriétés Name, Length, Mode, CreationTime

Ce qui donne comme commande : get-childitem | fl -Property Name, Length, Mode, CreationTime

Pour lister une seule propriété d’un objet d’un fichier précis, vous pouvez mettre entre parenthèse l’objet suivi de la propriété : (get-childitem c:\temp\Test_01.docx).mode

Vous avez aussi la possibilité d’utiliser le caractère joker pour afficher les propriétés : get-childitem | fl name, *time

La propriété ft Utiliser le formatage ft sur le dossier C:\temp en utilisant les propriétés Name, Length, Mode, CreationTime

Ce qui donne comme commande : get-childitem | ft -Property Name, Length, Mode, CreationTime

Le format ft est le format utilisé par défaut, autrement dit get-childitem c:\ et identique à get-childitem c:\ | ft

GroupBy permet de regrouper en fonction d’une propriété ou une valeur commune.

  • Ex : afficher les dossiers et fichiers de c:\temp, les grouper par extensions de fichiers.
    • Pour cet exemple, nous devons d’abord trier les fichiers par extension, nous utiliserons une nouvelle commande sort-object « propriété » (exemple : sort-object extension), le résultat est mis dans une variable.
    • Ensuite nous regroupons par extension

$tri = get-childitem c:\temp | sort-object extension

$tri | ft name –groupBy extension

La propriété fw Utiliser le formatage fw sur le dossier C:\temp (pour rappel ce mode n’affiche qu’une seule propriété au format large donc pas besoin d’en préciser cela ne fonctionnera pas)

Ce qui donne comme commande : get-childitem | fw

Fw permet d’utiliser l’option –column permettant de définir le nombre de colonnes à afficher :

get-childitem c:\temp | fw -Column 3

Règles programmatique

Dans PowerShell, 2 méthodes peuvent être utilisées pour les chaînes de caractères :

  • Les guillemets doubles “Bonjour”
  • Les guillemets simples 'Bonjour'

Write-host permet d'écrire, a priori pas de différence entre “ ” et ' '

Cependant il y'a une différence si nous travaillons avec des variables

  • Les doubles guillemets remplacent une variable par son contenu (nommé substitution de variable).
  • Les guillemets simples ignorent les variables et conservent la chaîne qu'ils contiennent

Si vous souhaitez un caractère spécial dans une variable comme le $ par ex, il devra être précédé du caractère spécial “`” (appelé backtick)

Liste des caractères d'échappement et leurs descriptions

  • `n → saut de ligne
  • `f → saut de page
  • `r → retour chariot
  • `a → bip sonore
  • `b → retour arrière
  • `t → tabulation horizontale
  • `v → tabulation verticale
  • `0 (zéro) → Null ou espace
  • `' → guillemet simple
  • `““ → guillemet double
  • `` → backtick simple

Le backtick utilisé en fin d'une ligne de commande indique à PowerShell que la commande continue sur la ligne suivante.

Lorsque vous souhaitez afficher la propriété d'un objet, il faut utiliser la syntaxe : $(objet.propriété)

Exemple, afficher la taille du fichier Test_01.txt qui se trouve dans c:\Temp

$x = Get-ChildItem C:\temp\Test_01.txt Write-Host “Taille du fichier $($x.name) - $($x.Length)“

Nous voici à la fin de la section découverte :)

decouverte_de_powershell.txt · Dernière modification: 2018/09/09 14:53 par praxium