Partager via


À propos des tableaux

Brève description

Décrit les tableaux, qui sont des structures de données conçues pour stocker des collections d’éléments.

Description longue

Un tableau est une structure de données conçue pour stocker une collection d’éléments. Les articles peuvent être du même type ou de types différents.

À partir de Windows PowerShell 3.0, une collection de zéro ou d’un objet possède certaines propriétés de tableaux.

Création et initialisation d’un tableau

Pour créer et initialiser un tableau, attribuez plusieurs valeurs à une variable. Les valeurs stockées dans le tableau sont délimitées par une virgule et séparées du nom de la variable par l’opérateur d’affectation (=).

Par exemple, pour créer un tableau nommé $A qui contient les sept valeurs numériques (int) 22, 5, 10, 8, 12, 9 et 80, tapez :

$A = 22,5,10,8,12,9,80

Vous pouvez également créer et initialiser un tableau à l’aide de l’opérateur range (..). Par exemple, pour créer et initialiser un tableau nommé « $B » qui contient les valeurs 5 à 8, tapez :

$B = 5..8

Par conséquent, $B contient quatre valeurs : 5, 6, 7 et 8.

Lorsqu’aucun type de données n’est spécifié, PowerShell crée chaque tableau en tant que tableau d’objets (type : System.Object[]). Pour déterminer le type de données d’un tableau, utilisez la méthode GetType(). Par exemple, pour déterminer le type de données du tableau $a, tapez :

$a.GetType()

Pour créer un tableau fortement typé, c’est-à-dire un tableau qui ne peut contenir que des valeurs d’un type particulier, convertissez la variable en tant que type de tableau, tel que string[], long[] ou int32[]. Pour convertir un tableau, faites précéder le nom de la variable d’un type de tableau entre crochets. Par exemple, pour créer un tableau d’entiers 32 bits nommé $ia contenant quatre entiers (1500, 2230, 3350 et 4000), tapez :

[int32[]]$ia = 1500,2230,3350,4000

Par conséquent, le tableau $ia ne peut contenir que des entiers.

Vous pouvez créer des tableaux qui sont convertis en n’importe quel type pris en charge dans Microsoft .NET Framework. Par exemple, les objets que Get-Process récupère pour représenter les processus sont de type System.Diagnostics.Process. Pour créer un tableau d’objets de processus fortement typé, entrez la commande suivante :

[Diagnostics.Process[]]$zz = Get-Process

L’opérateur de sous-expression de tableau

L’opérateur de sous-expression array crée un tableau, même s’il contient zéro ou un objet.

La syntaxe de l’opérateur de tableau est la suivante :

@( ... )

Vous pouvez utiliser l’opérateur de réseau pour créer un tableau de zéro ou d’un seul objet. Par exemple:

PS> $a = @("Hello World")
PS> $a.Count
1
PS> $b = @()
PS> $b.Count
0

L’opérateur array est particulièrement utile dans les scripts lorsque vous obtenez des objets, mais que vous ne savez pas combien d’objets vous obtiendrez. Par exemple:

$p = @(Get-Process Notepad)

Pour plus d’informations sur l’opérateur de sous-expression de tableau, consultez about_Operators.

Accès et utilisation des éléments de tableau

Lecture d’un tableau

Vous pouvez faire référence à un tableau à l’aide de son nom de variable. Pour afficher tous les éléments du tableau, tapez le nom du tableau. Par exemple, en supposant que $a est un tableau contenant les entiers 0, 1, 2 jusqu’à 9 ; en tapant :

$a
0
1
2
3
4
5
6
7
8
9

Vous pouvez faire référence aux éléments d’un tableau à l’aide d’un index, à partir de la position 0. Placez le numéro d’index entre parenthèses. Par exemple, pour afficher le premier élément du tableau $a, tapez :

$a[0]
0

Pour afficher le troisième élément du $a tableau, tapez :

$a[2]
2

Vous pouvez récupérer une partie du tableau à l’aide d’un opérateur de plage pour l’index. Par exemple, pour récupérer les deuxième à cinquième éléments du tableau, vous devez taper :

$a[1..4]
1
2
3
4

Les nombres négatifs comptent depuis la fin du tableau. Par exemple, « -1 » fait référence au dernier élément du tableau. Pour afficher les trois derniers éléments du tableau, dans l’ordre croissant d’index, tapez :

$a = 0 .. 9
$a[-3..-1]
7
8
9

Si vous tapez des index négatifs dans l’ordre décroissant, votre sortie change.

$a = 0 .. 9
$a[-1..-3]
9
8
7

Cependant, soyez prudent lorsque vous utilisez cette notation. La notation passe de la limite de fin au début du tableau.

$a = 0 .. 9
$a[2..-2]
2
1
0
9
8

En outre, une erreur courante consiste à supposer $a[0..-2] fait référence à tous les éléments du tableau, à l’exception de la dernière. Il fait référence aux éléments premier, dernier et second à dernier du tableau.

Vous pouvez utiliser l’opérateur plus (+) pour combiner une plage avec une liste d’éléments dans un tableau. Par exemple, pour afficher les éléments aux positions d’index 0, 2 et 4 à 6, tapez :

$a = 0 .. 9
$a[0,2+4..6]
0
2
4
5
6

De plus, pour répertorier plusieurs plages et éléments individuels, vous pouvez utiliser l’opérateur plus. Par exemple, pour lister les éléments de zéro à deux, de quatre à six et l’élément à la huitième position de type :

$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8

Itérations sur les éléments de tableau

Vous pouvez également utiliser des constructions de bouclage, telles que les boucles ForEach, For et While, pour faire référence aux éléments d’un tableau. Par exemple, pour utiliser une boucle ForEach afin d’afficher les éléments du $a tableau, tapez :

$a = 0..9
foreach ($element in $a) {
  $element
}
0
1
2
3
4
5
6
7
8
9

La boucle Foreach parcourt le tableau et renvoie chaque valeur du tableau jusqu’à ce qu’elle atteigne la fin du tableau.

La boucle For est utile lorsque vous incrémentez des compteurs tout en examinant les éléments d’un tableau. Par exemple, pour utiliser une boucle For afin de renvoyer toutes les autres valeurs d’un tableau, tapez :

$a = 0..9
for ($i = 0; $i -le ($a.length - 1); $i += 2) {
  $a[$i]
}
0
2
4
6
8

Vous pouvez utiliser une boucle While pour afficher les éléments d’un tableau jusqu’à ce qu’une condition définie ne soit plus vraie. Par exemple, pour afficher les éléments du $a tableau alors que l’index du tableau est inférieur à 4, tapez :

$a = 0..9
$i=0
while($i -lt 4) {
  $a[$i];
  $i++
}
0
1
2
3

Propriétés des tableaux

Nombre ou Longueur ou Longueur Longue

Pour déterminer le nombre d’éléments d’un tableau, utilisez la Length propriété ou son Count alias. Longlength est utile si le tableau contient plus de 2 147 483 647 éléments.

$a = 0..9
$a.Count
$a.Length
10
10

Classement

Renvoie le nombre de dimensions dans le tableau. La plupart des tableaux dans PowerShell n’ont qu’une seule dimension. Même lorsque vous pensez que vous construisez un tableau multidimensionnel ; Comme l’exemple suivant :

$a = @(
  @(0,1),
  @("b", "c"),
  @(Get-Process)
)

[int]$r = $a.Rank
"`$a rank: $r"
$a rank: 1

La création d’un tableau véritablement multidimensionnel, en PowerShell, nécessite l’aide du .Net Framework. Comme dans l’exemple suivant :

[int[,]]$rank2 = [int[,]]::new(5,5)
$rank2.rank
2

Méthodes des tableaux

Effacer

Définit toutes les valeurs des éléments à la valeur par défaut du type d'élément du tableau. La méthode Clear() ne réinitialise pas la taille du tableau.

Dans l’exemple $a suivant se trouve un tableau d’objets.

$a = 1, 2, 3
$a.Clear()
$a | % { $null -eq $_ }
True
True
True

Dans cet exemple, $intA est explicitement typé pour contenir des entiers.

[int[]] $intA = 1, 2, 3
$intA.Clear()
$intA
0
0
0

Pour chaque

Permet d’itérer sur tous les éléments du tableau et d’effectuer une opération donnée pour chaque élément du tableau.

La méthode ForEach comporte plusieurs surcharges qui effectuent différentes opérations.

ForEach(scriptblock expression)
ForEach(type convertToType)
ForEach(string propertyName)
ForEach(string propertyName, object[] newValue)
ForEach(string methodName)
ForEach(string methodName, object[] arguments)
ForEach(scriptblock expression, object[] arguments)

ForEach(expression de scriptblock)

ForEach(expression scriptblock, arguments object[])

Remarque

La syntaxe nécessite l’utilisation d’un bloc de script. Les parenthèses sont facultatives.

L’exemple suivant montre comment utiliser la méthode foreach. Dans ce cas, l’intention est de générer la valeur carrée des éléments du tableau.

Veuillez noter que cette méthode a été ajoutée dans PowerShell v4 et n’est pas disponible dans les versions inférieures. Pour les versions antérieures, veuillez utiliser la méthode Pipelining à l’applet de commande ForEach-Object

$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9

Tout comme le -ArgumentList paramètre de ForEach-Object, le arguments paramètre permet de passer un tableau d’arguments à un bloc de script configuré pour les accepter.

ForEach(type convertToType)

La ForEach méthode peut être utilisée pour convertir rapidement les éléments dans un autre type ; l’exemple suivant montre comment convertir une liste de dates de chaîne en [DateTime] type.

@("1/1/2017", "2/1/2017", "3/1/2017").ForEach([datetime])

Sunday, January 1, 2017 12:00:00 AM
Wednesday, February 1, 2017 12:00:00 AM
Wednesday, March 1, 2017 12:00:00 AM

ForEach(string propertyName)

ForEach(chaîne propertyName, object[] newValue)

Cette ForEach méthode permet également de récupérer rapidement ou de définir des valeurs de propriété pour chaque élément de la collection.

# Set all LastAccessTime properties of files to the current date.
(dir 'C:\Temp').ForEach('LastAccessTime', (Get-Date))
# View the newly set LastAccessTime of all items, and find Unique entries.
(dir 'C:\Temp').ForEach('LastAccessTime') | Get-Unique
Wednesday, June 20, 2018 9:21:57 AM

ForEach(string methodName)

ForEach(string methodName, arguments object[])

Enfin, ForEach les méthodes peuvent être utilisées pour exécuter une méthode sur chaque élément de la collection.

("one", "two", "three").ForEach("ToUpper")
ONE
TWO
THREE

Tout comme le -ArgumentList paramètre de ForEach-Object, le arguments paramètre permet de passer un tableau d’arguments à un bloc de script configuré pour les accepter.

Remarque

À partir de Windows PowerShell 3.0, la récupération des propriétés et l’exécution de méthodes pour chaque élément d’une collection peuvent également être effectuées à l’aide de « Méthodes d’objets et de collections scalaires ». Vous pouvez en savoir plus à ce sujet ici about_methods

Permet de filtrer ou de sélectionner les éléments du tableau. Le script doit évaluer tout ce qui est différent de : zéro (0), chaîne vide, $false ou $null pour que l’élément s’affiche après le Where

Il y a une définition de la Where méthode.

Where(scriptblock expression[, WhereOperatorSelectionMode mode
                            [, int numberToReturn]])

Le Expression scriptblock est requis pour le filtrage, l’argument optional permet des mode capacités de sélection supplémentaires et l’argument numberToReturn optional permet de limiter le nombre d’éléments renvoyés par le filtre.

Remarque

La syntaxe nécessite l’utilisation d’un bloc de script. Les parenthèses sont facultatives.

L’exemple suivant montre comment sélectionner tous les nombres impairs du tableau.

(0..9).Where{ $_ % 2 }
1
3
5
7
9

Les modes de sélection suivants sont disponibles.

Par défaut

Le Default mode filtre les éléments à l’aide du Expression scriptblock.

Si a numberToReturn est fourni, il spécifie le nombre maximal d’articles à renvoyer.

# Get the zip files in the current users profile, sorted by LastAccessTime.
$Zips = dir $env:userprofile -Recurse '*.zip' | Sort-Object LastAccessTime
# Get the least accessed file over 100MB
$Zips.Where({$_.Length -gt 100MB}, 'Default', 1)

Remarque

Le mode Default et le mode First retournent les premiers éléments (numberToReturn) et peuvent être utilisés de manière interchangeable.

Dernier

$h = (Get-Date).AddHours(-1)
$logs = dir 'C:\' -Recurse '*.log' | Sort-Object CreationTime
# Find the last 5 log files created in the past hour.
$logs.Where({$_.CreationTime -gt $h}, 'Last', 5)

SkipUntil

Le mode SkipUntil ignore tous les objets d’une collection jusqu’à ce qu’un objet passe le filtre d’expression de bloc de script. Il renvoie ensuite TOUS les éléments de collection restants sans les tester. Un seul élément réussi est testé

Cela signifie que la collection renvoyée contiendra à la fois des éléments réussis et non réussis qui n’ont PAS été testés.

Le nombre d’éléments renvoyés peut être limité en passant une valeur à l’argument numberToReturn .

$computers = "Server01", "Server02", "Server03", "localhost", "Server04"
# Find the first available online server.
$computers.Where({ Test-Connection $_ }, 'SkipUntil', 1)
localhost

Jusqu’à

Le Until mode inverse le SkipUntil mode. Il retourne ALL éléments dans une collection jusqu’à ce qu’un élément passe l’expression du bloc de script. Une fois qu’un élément passe l’expression scriptblock, la méthode arrête de traiter les Where éléments.

Cela signifie que vous recevrez le premier ensemble d’éléments non transmetteurs de la Where méthode. Une fois qu’un article a réussi, le reste ne sera PAS testé ni retourné.

Le nombre d’éléments renvoyés peut être limité en passant une valeur à l’argument numberToReturn .

# Retrieve the first set of numbers less than or equal to 10.
(1..50).Where({$_ -gt 10}, 'Until')
# This would perform the same operation.
(1..50).Where({$_ -le 10})
1
2
3
4
5
6
7
8
9
10

Remarque

Les deux Until fonctionnent SkipUntil selon le principe de NE PAS tester un lot d’articles.

Until renvoie les éléments AVANT le premier passage.

SkipUntil renvoie tous les éléments APRÈS le premier passage, y compris le premier élément qui passe.

Fendre

Le Split mode divise ou regroupe les éléments de collection en deux collections distinctes. Ceux qui passent l’expression scriptblock, et ceux qui ne le font pas.

Si a numberToReturn est spécifié, la première collection contiendra les éléments de passage , sans dépasser la valeur spécifiée.

Les objets restants, même ceux qui PASSENT le filtre d’expression, seront renvoyés dans la deuxième collection.

$running, $stopped = (Get-Service).Where({$_.Status -eq 'Running'}, 'Split')
$running
Status   Name               DisplayName
------   ----               -----------
Running  Appinfo            Application Information
Running  AudioEndpointBu... Windows Audio Endpoint Builder
Running  Audiosrv           Windows Audio
...
$stopped
Status   Name               DisplayName
------   ----               -----------
Stopped  AJRouter           AllJoyn Router Service
Stopped  ALG                Application Layer Gateway Service
Stopped  AppIDSvc           Application Identity
...

Obtenir les membres d’un tableau

Pour obtenir les propriétés et les méthodes d’un tableau, telles que la propriété Length et la méthode SetValue, utilisez le paramètre InputObject de l’applet de commande Get-Member.

Lorsque vous dirigez un tableau vers Get-Member, PowerShell envoie les éléments un par un et Get-Member renvoie le type de chaque élément du tableau (en ignorant les doublons).

Lorsque vous utilisez le paramètre -InputObject , Get-Member renvoie les membres du tableau.

Par exemple, la commande suivante récupère les membres de la $a variable array.

Get-Member -InputObject $a

Vous pouvez également obtenir les membres d’un tableau en tapant une virgule (,) avant la valeur qui est redirigée vers l’applet de commande Get-Member. La virgule fait du tableau le deuxième élément d’un tableau de tableaux. Windows PowerShell canalise les tableaux un par un, Get-Member renvoie les membres du tableau. Comme les deux exemples suivants.

,$a | Get-Member

,(1,2,3) | Get-Member

Manipulation d’un tableau

Vous pouvez modifier les éléments d’un tableau, ajouter un élément à un tableau et combiner les valeurs de deux tableaux dans un troisième tableau.

Pour modifier la valeur d’un élément particulier dans un tableau, spécifiez le nom du tableau et l’index de l’élément à modifier, puis utilisez l’opérateur d’affectation (=) pour spécifier une nouvelle valeur pour l’élément. Par exemple, pour remplacer la valeur du deuxième élément du tableau (position d’index $a 1) par 10, tapez :

$a[1] = 10

Vous pouvez également utiliser la méthode SetValue d’un tableau pour modifier une valeur. L’exemple suivant remplace la deuxième valeur (position d’index 1) du $a tableau par 500 :

$a.SetValue(500,1)

Vous pouvez utiliser l’opérateur += pour ajouter un élément à un tableau. L’exemple suivant montre comment ajouter un élément au $a tableau.

$a = @(0..4)
$a += 5

Remarque

Lorsque vous utilisez l’opérateur += , PowerShell crée en fait un tableau avec les valeurs du tableau d’origine et la valeur ajoutée. Cela peut entraîner des problèmes de performances si l’opération est répétée plusieurs fois ou si la taille de la matrice est trop grande.

Il n’est pas facile de supprimer des éléments d’un tableau, mais vous pouvez créer un nouveau tableau qui ne contient que des éléments sélectionnés d’un tableau existant. Par exemple, pour créer le $t tableau avec tous les éléments du tableau, à l’exception de la valeur à la $a position d’index 2, tapez :

$t = $a[0,1 + 3..($a.length - 1)]

Pour combiner deux tableaux en un seul tableau, utilisez l’opérateur plus (+). L’exemple suivant crée deux tableaux, les combine, puis affiche le tableau combiné résultant.

$x = 1,3
$y = 5,9
$z = $x + $y

Par conséquent, le $z tableau contient 1, 3, 5 et 9.

Pour supprimer un tableau, attribuez-lui la valeur $null. La commande suivante supprime le tableau dans la $a variable.

$a = $null

Vous pouvez également utiliser l’applet Remove-Item de commande, mais l’attribution d’une valeur de $null est plus rapide, en particulier pour les grands tableaux.

Tableaux de zéro ou de un

À compter de Windows PowerShell 3.0, une collection de zéro ou d’un objet possède la propriété Count and Length. En outre, vous pouvez indexer dans un tableau d’un seul objet. Cette fonctionnalité vous permet d’éviter les erreurs de script qui se produisent lorsqu’une commande qui attend une collection reçoit moins de deux éléments.

Les exemples suivants illustrent cette fonctionnalité.

Zéro objet

$a = $null
$a.Count
$a.Length
0
0

Un seul objet

$a = 4
$a.Count
$a.Length
$a[0]
$a[-1]
1
1
4
4

Voir aussi