Aller au contenu principal

Les variables et les types de données

Les variables en PowerShell sont identifiées avec le préfixe $. Par exemple, la variable Foo s'écrit $Foo dans le code PowerShell. Le nom de la variable est Foo, et le caractère $ indique à PowerShell qu'il s'agit d'une variable.

Une variable contient un objet. L'opération consistant à mettre un objet dans une variable se nomme une affectation, et on la réalise à l'aide de l'opérateur d'affectation, =. Cet opérateur récupère l'objet résultant à la fin du pipeline afin de le stocker dans la variable, plutôt que de le laisser tomber dans la console.

Pour obtenir le contenu d'une variable, on utilise simplement son nom avec le caractère $. Cela a pour effet d'envoyer son contenu dans le pipeline. On peut aussi utiliser cette variable pour passer un objet dans un paramètre.

image

Une variable contient un objet, donc on peut l'utiliser pour accéder à toutes les méthodes et tous les attributs offerts par cet objet.

image

On peut connaître la liste de toutes les variables déclarées avec la commande Get-Variable.

image

Variables prédéfinies

Certaines variables sont prédéfinies par PowerShell.

VariableDescription
$trueReprésente la valeur booléenne vraie
$falseReprésente la valeur booléenne fausse
$nullReprésente la valeur nulle
$PIDLe numéro d'identification du processus courant
$PWDReprésente le répertoire courant
$argsContient un tableau des arguments passés à l'appel d'une fonction ou d'un script
$errorListe des erreurs lors de la session
$PSVersionTableTableau des versions de PowerShell
$HostObjet qui permet de modifier l'interface PowerShell
$HomeLe chemin du répertoire de l'utilisateur (typiquement C:\Users\nomdutilisateur)
$PSHomeLe chemin dans lequel PowerShell est installé
$PSCultureLa culture de la session PowerShell (fr-CA, en-US, etc.)
$_ ou $PSItemValeur courante dans le pipeline
...

Variables d'environnement

Le système d'exploitation offre à tous les processus un ensemble de variables gérées par le système et qui procurent de l'information sur l'environnement d'exécution.

Voici quelques variables d'environnement (mais il y en a plusieurs autres).

Variable (PoSH)Description
$env:COMPUTERNAMELe nom d'hôte de l'ordinateur
$env:USERNAMELe nom de l'utilisateur
$env:USERDOMAINLe nom du domaine de l'utilisateur courant (format NetBIOS)
$env:USERDNSDOMAINLe nom du domaine de l'utilisateur courant (format FQDN)
$env:LOGONSERVERLe nom du contrôleur de domaine ayant authentifié l'utilisateur lors de son logon
$env:UserProfileLe chemin vers le profil de l'utilisateur (typiquement C:\Users\nomdutilisateur)
$env:APPDATAChemin vers le répertoire AppData/Roaming de l'utilisateur courant
$env:LocalAppDataChemin vers le répertoire AppData/Local de l'utilisateur courant
$env:HOMEDRIVELe lecteur sur lequel est situé le profil de l'utilisateur
$env:HOMEPATHLe chemin relatif du profil utilisateur sur le lecteur HOMEDRIVE
$env:TEMPLe chemin vers le répertoire temporaire de l'utilisateur (même que TMP)
$env:TMPLe chemin vers le répertoire temporaire de l'utilisateur (même que TEMP)
$env:ALLUSERSPROFILELe chemin vers le profil utilisateur commun à tous les utilisateurs (programdata)
$env:ProgramDataLe chemin du répertoire qui contiennent les configurations du système
$env:ProgramFilesLe chemin vers le répertoire contenant les fichiers de programme
$env:{ProgramFiles (x86)}Le chemin vers le répertoire des fichiers de programme 32-bits (WoW64)
$env:PathLa liste des chemins qui contiennent des commandes exécutables
$env:PATHEXTLa liste des extensions à considérer comme exécutables
$env:PUBLICLe chemin vers le répertoire public (partagé par tous les profils)
$env:NUMBER_OF_PROCESSORSLe nombre de processeurs logiques installés dans le système
$env:PROCESSOR_ARCHITECTUREL'architecture du processeur (x86, amd64, ia64, arm64, etc.)
$env:ComSpecLe chemin vers l'interpréteur de commande par défaut
$env:OneDriveLe chemin vers le répertoire de synchronisation de OneDrive
$env:OneDriveCommercialLe chemin vers le répertoire de synchronisation de OneDrive For Business
$env:SystemDriveLe lecteur sur lequel Windows est installé (typiquement C:)
$env:SystemRootLe chemin vers le répertoire où Windows est installé (typiquement C:\Windows)
$env:PSModulePathLa liste des chemins qui contiennent des modules PowerShell

Dans l'interpréteur de commande classique (cmd), et à plusieurs autres endroits du système (comme dans le shell graphique, le registre, etc.), les variables d'environnement sont accessibles en les entourant de deux symboles %.

image

image

La commande Set permet d'obtenir la liste des variables d'environnement.

image

Sous PowerShell, la syntaxe est différente. On utilise le préfixe $env: pour y accéder.

image

Pour obtenir la liste, on fait un Get-ChildItem sur le lecteur env:, qui contient toutes les variables d'environnement du processus.

image

attention

Les variables d'environnement sont rattachées à un processus particulier, et chaque processus créé hérite des variables d'environnement du processus parent. Ainsi, si on fait des modification à une variable d'environnement, celle-ci ne sera modifiée que dans ce processus et pas les autres. De plus, le changement sera détruit après la fin du processus, lorsque la fenêtre PowerShell est fermée. Il est possible de modifier une variable d'environnement de manière permanente, mais nous verrons cela dans une séance ultérieure.

Types de données

Tout objet en PowerShell possède un type, et s'il est dans une variable, celle-ci possède également ce type. Il existe plusieurs types distincts.

Nombres entiers

TypeDescriptionValeur minimaleValeur maximale
[byte]Entier non signé de 8 bits0255
[sbyte]Entier signé de 8 bits-128127
[int16]Entier signé de 16 bits-32 76832 767
[uint16]Entier non signé de 16 bits065 535
[int32] ou [int]Entier signé de 32 bits-2 147 483 6482 147 483 647
[uint32]Entier non signé de 32 bits04 294 967 295
[int64] ou [long]Entier signé de 64 bits-9 223 372 036 854 775 8089 223 372 036 854 775 807
[uint64]Entier non signé de 64 bits018 446 744 073 709 551 615
info

Par défaut, les nombres entiers sont de type [int32] (ou [int64] s'il sont trop grands). Pour qu'ils soient de type différent, il faut le spécifier devant la valeur. (Par exemple, [uint32]42).

Nombre à virgule flottante (décimaux)

TypeDescriptionPrécisionValeur minimale/maximale
[single] ou [float]Nombre à virgule flottante de précision simple32 bits± 3,402 823 E+38
[double]Nombre à virgule flottante de précision double (par défaut)64 bits± 1,79 769 313 486 232 E+308
[decimal]Nombre décimal128 bits± 79 228 162 514 264 337 593 543 950 335
info

Par défaut, les nombres non entiers sont de type [double]. Pour qu'ils soient d'un autre type, il faut le spécifier devant la valeur (par exemple, [single] 3.14).

Les nombres à virgule flottante sont la méthode qu'emploient les ordinateurs pour représenter les nombres non entiers. Ils combinent une mantisse et un exposant, comme dans la notation scientifique, ce qui permet de représenter de très grands nombres mais en sacrifiant de la précision. Vous pouvez suivre ce lien pour en apprendre davantage sur la virgule flottante en informatique.

Autres types de données

TypeDescriptionExample
[boolean] ou [bool]Valeur booléenne ($true ou $false)$true
[string]Chaîne de caractères à taille fixe"allo"
[char]Caractère unicode de 16 bits[char]"X"
[datetime]Date et heureGet-Date
[hashtable]Table de hachage@{a = 1; b = 2; c = 3}
[pscustomobject]Objet dictionnaire[pscustomobject]@{a = 1; b = 2; c = 3}
[object]Type qui décrit n'importe quel objet (toutes les classes dérivent de [object])
[array] ou [type[]]Tableau (contient plusieurs objets, dans un ordre précis)@(1, 2, 3)
[scriptblock]Bloc de script précompilé$script = [scriptblock]{ # une ou plusieurs commandes… }
[math]Expose des fonctions mathématiques[math]::Pow(10,2)

Pour en savoir plus sur les types de données PowerShell, consultez cette page.

Valeurs minimum et maximum

Toute donnée est un objet, et un objet possède un type. Dans le paradigme orienté objet, un type est une classe, et un objet de ce type est une instance de cette classe. Les classes sont en quelque sorte des plans, ou modèles, qui dictent à quoi une donnée doit ressembler. Une classe est représentée entre crochets [ et ].

La classe elle-même expose des méthodes et des attributs, dits statiques, qui décrivent certains aspects de ce type. Alors qu'on peut accéder aux méthodes et attributs d'un objet (ou instance de classe) avec un point . , on accède les méthodes et attributs d'une classe avec un double deux points ::.

Dans le cas des types numériques, des attributs de la classe correspondant au type nous permettent d'obtenir les valeurs minimum et maximum que ce type supporte.

image

Conversion de types

On peut convertir les valeurs d'un type à l'autre, et les castant, c’est-à-dire en forçant le type.

image

Il faut toutefois faire attention que la valeur soit compatible avec le type vers lequel on souhaite la convertir.

image

Suffixes de multiplication des octets

PowerShell nous offre un moyen de calculer facilement les grandeurs (Ko, Mo, Go, etc.)

SuffixeSignificationValeur
KbKibioctet210 = 1024
MbMébioctet220 = 10242 = 1 048 576
GbGibioctet230 = 10243 = 1 073 741 824
TbTébioctet240 = 10244 = 1 099 511 627 776
PbPébioctet250 = 10245 = 1 125 899 906 842 624

Cela peut s'avérer très pratique pour, par exemple, calculer les tailles de fichiers.

image