À propos des tableaux
Description courte
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 éléments peuvent être du même type ou des types différents.
À compter de Windows PowerShell 3.0, une collection de zéro ou d’un objet a certaines propriétés de tableaux.
Création et initialisation d’un tableau
Pour créer et initialiser un tableau, affectez 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) de 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 de plage (..). 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, castez la variable en tant que type de tableau, comme string[], long[], ou int32[]. Pour caster un tableau, précédez le nom de la variable avec 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 des processus sont du type System.Diagnostics.Process. Pour créer un tableau fortement typé d’objets de processus, entrez la commande suivante :
[Diagnostics.Process[]]$zz = Get-Process
Opérateur de sous-expression de tableau
L’opérateur de sous-expression de tableau 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 tableau pour créer un tableau de zéro ou un objet. Par exemple :
PS> $a = @("Hello World")
PS> $a.Count
1
PS> $b = @()
PS> $b.Count
0
L’opérateur de tableau est particulièrement utile dans les scripts lorsque vous obtenez des objets, mais 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 d’é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 qu’il s’agit $a
d’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 commençant à la position 0. Placez le numéro d’index entre crochets. Par exemple, pour afficher le premier élément du $a
tableau, tapez :
$a[0]
0
Pour afficher le troisième élément dans le $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, tapez :
$a[1..4]
1
2
3
4
Nombre de nombres négatifs à partir de 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 de l’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
Toutefois, soyez prudent lorsque vous utilisez cette notation. Les cycles de notation 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 qu’il $a[0..-2]
s’agit de tous les éléments du tableau, à l’exception du dernier. Il fait référence au premier, au dernier et à l’avant-dernier élément 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
En outre, pour répertorier plusieurs plages et éléments individuels, vous pouvez utiliser l’opérateur plus. Par exemple, pour répertorier les éléments zéro à deux, quatre à six, et l’élément au type positionnel huitième :
$a = 0..9
$a[+0..2+4..6+8]
0
1
2
4
5
6
8
Itérations sur des éléments de tableau
Vous pouvez également utiliser des constructions de boucles, 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 pour afficher les éléments dans le $a
tableau, tapez :
$a = 0..9
foreach ($element in $a) {
$element
}
0
1
2
3
4
5
6
7
8
9
La boucle Foreach itère dans le tableau et retourne chaque valeur du tableau jusqu’à atteindre la fin du tableau.
La boucle For est utile lorsque vous incrémentez des compteurs lors de l’examen des éléments d’un tableau. Par exemple, pour utiliser une boucle For pour retourner 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 dans le $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
Count ou Length ou LongLength
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
Rank
Retourne le nombre de dimensions du tableau. La plupart des tableaux dans PowerShell n’ont qu’une seule dimension. Même quand vous pensez créer un tableau multidimensionnel ; comme dans 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, dans 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 d’élément sur 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 est 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
ForEach
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 a 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(scriptblock expression)
ForEach(scriptblock expression, object[] arguments)
Notes
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 dans le tableau.
Notez que cette méthode a été ajoutée dans PowerShell v4 et n’est pas disponible dans les versions ci-dessous. Pour les versions antérieures, utilisez la méthode Pipelining pour 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 transmettre 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 en 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(string propertyName, object[] newValue)
La ForEach
méthode peut également être utilisée pour récupérer ou définir rapidement 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, object[] arguments)
Enfin, ForEach
des 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.
Notes
À 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
Where
Permet de filtrer ou de sélectionner les éléments du tableau. Le script doit avoir une valeur différente de : zéro (0), chaîne vide ou $false
$null
pour que l’élément s’affiche après le Where
Il existe une définition pour la Where
méthode .
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
est Expression
scriptblock requis pour le filtrage, l’argument mode
facultatif autorise des fonctionnalités de sélection supplémentaires et l’argument numberToReturn
facultatif permet de limiter le nombre d’éléments retournés par le filtre.
Notes
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.
Default
Le Default
mode filtre les éléments à l’aide du Expression
scriptblock.
Si un numberToReturn
est fourni, il spécifie le nombre maximal d’éléments à retourner.
# 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)
Notes
Le mode et First
le Default
mode retournent les premiers éléments (numberToReturn
) et peuvent être utilisés indifféremment.
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 SkipUntil
mode ignore tous les objets d’une collection jusqu’à ce qu’un objet passe le filtre d’expression de bloc de script. Il retourne ensuite tous les éléments de collection restants sans les tester. Un seul élément réussi est testé
Cela signifie que la collection retourné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 retourné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. Elle retourne TOUS les éléments d’une collection jusqu’à ce qu’un élément passe l’expression de bloc de script. Une fois qu’un élément transmet l’expression scriptblock, la méthode cesse de Where
traiter les éléments.
Cela signifie que vous recevrez le premier ensemble d’éléments non transmis par la Where
méthode . Une fois qu’un élément est réussi, le reste ne sera PAS testé ni retourné.
Le nombre d’éléments retourné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
Notes
SkipUntil
Et Until
fonctionnent sous le principe de NE PAS tester un lot d’éléments.
Until
retourne les éléments AVANT la première passe.
SkipUntil
retourne tous les éléments APRÈS la première passe, y compris le premier élément qui passe.
Split
Le Split
mode fractionne ou regroupe les éléments de la collection en deux collections distinctes. Ceux qui passent l’expression scriptblock et ceux qui ne le font pas.
Si un numberToReturn
est spécifié, la première collection contient les éléments passants , sans dépasser la valeur spécifiée.
Les objets restants, même ceux qui PASSEnt le filtre d’expression, seront retourné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
retourne le type de chaque élément du tableau (en ignorant les doublons).
Lorsque vous utilisez le paramètre -InputObject , Get-Member
retourne les membres du tableau.
Par exemple, la commande suivante obtient les membres de la $a
variable de tableau.
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 et Get-Member retourne 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 que vous souhaitez 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 1) par $a
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
Notes
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 du tableau est trop grande.
Il n’est pas facile de supprimer des éléments d’un tableau, mais vous pouvez créer un tableau qui contient uniquement les é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 $a
de la valeur à la 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, affectez la valeur $null au tableau. La commande suivante supprime le tableau dans la $a
variable .
$a = $null
Vous pouvez également utiliser l’applet Remove-Item
de commande, mais l’affectation d’une valeur de $null
est plus rapide, en particulier pour les grands tableaux.
Tableaux de zéro ou d’un
À compter de Windows PowerShell 3.0, une collection de zéro ou d’un objet a la propriété Count et Length. Vous pouvez également indexer dans un tableau d’un objet. Cette fonctionnalité vous permet d’éviter les erreurs de script qui se produisent lorsqu’une commande qui attend une collection obtient moins de deux éléments.
Les exemples suivants illustrent cette fonctionnalité.
Zéro objet
$a = $null
$a.Count
$a.Length
0
0
Un objet
$a = 4
$a.Count
$a.Length
$a[0]
$a[-1]
1
1
4
4