about_Arrays
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 possède 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 (entier) de 22, 5, 10, 8, 12, 9 et 80, tapez :
$A = 22,5,10,8,12,9,80
La virgule peut également être utilisée pour initialiser un tableau d’éléments unique en plaçant la virgule avant l’élément unique.
Par exemple, pour créer un tableau d’éléments unique nommé $B
contenant la valeur unique de 7, tapez :
$B = ,7
Vous pouvez également créer et initialiser un tableau à l’aide de l’opérateur de plage (..
).
L’exemple suivant crée un tableau contenant les valeurs 5 à 8.
$C = 5..8
Par conséquent, $C
contient quatre valeurs : 5, 6, 7 et 8.
Quand aucun type de données n’est spécifié, PowerShell crée chaque tableau en tant que tableau d’objets (System.Object[]). Pour déterminer le type de données d’un tableau, utilisez la GetType()
méthode. Par exemple :
$A.GetType()
Pour créer un tableau fortement typé, autrement dit, un tableau qui peut contenir uniquement des valeurs d’un type particulier, caster la variable en tant que type de tableau, tel que string[], long[] ou int32[]. Pour convertir un tableau, précédez le nom de la variable avec un type de tableau entre crochets. Par exemple :
[int32[]]$ia = 1500, 2230, 3350, 4000
Par conséquent, le $ia
tableau ne peut contenir que des entiers.
Vous pouvez créer des tableaux qui sont convertis en n’importe quel type pris en charge dans le .NET. Par exemple, les objets qui Get-Process
récupèrent pour représenter les processus sont de 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 à partir des instructions qu’il contient. Quelle que soit l’instruction à l’intérieur de l’opérateur, l’opérateur le place dans un tableau. Même s’il y a 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 :
$a = @("Hello World")
$a.Count
1
$b = @()
$b.Count
0
L’opérateur de tableau est utile dans les scripts lorsque vous obtenez des objets, mais ne savez pas combien d’attendre. 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, appelez le nom du tableau. Par exemple, $a
est un tableau des nombres 0 à 9 :
$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. Placez le numéro d’index entre crochets. Les valeurs d’index commencent à 0
. Par exemple, pour afficher l’élément first dans le $a
tableau, 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 et cinquième éléments du tableau, vous devez taper :
$a[1..4]
1
2
3
4
Nombres count négatifs de la fin du tableau. Par exemple, -1
fait référence à l’élément last du tableau. Pour afficher les last trois é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
Toutefois, soyez prudent lors de l’utilisation de cette notation. Les cycles de notation entre la limite de fin et le début du tableau.
$a = 0 .. 9
$a[2..-2]
2
1
0
9
8
En outre, une erreur courante consiste à supposer que $a[0..-2]
tous les éléments du tableau, à l’exception de celui-ci last . Il fait référence aux firstéléments , lastet second à-last dans le tableau.
Vous pouvez utiliser l’opérateur plus (+
) pour combiner des plages 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 huitième type positionnel :
$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 foreach
, for
et while
des boucles, pour faire référence aux éléments d’un tableau. Par exemple, pour utiliser une foreach
boucle 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 foreach
boucle effectue une itération dans le tableau et retourne chaque valeur dans le tableau until atteignant la fin du tableau.
La for
boucle est utile lorsque vous incrémentez des compteurs lors de l’examen des éléments d’un tableau. Par exemple, pour utiliser une for
boucle 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 while
boucle pour afficher les éléments d’un tableau until , une condition définie n’est 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
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 ont une dimension, uniquement. Même quand vous pensez que vous créez un tableau multidimensionnel comme dans l’exemple suivant :
$a = @(
@(0,1),
@("b", "c"),
@(Get-Process)
)
"`$a rank: $($a.Rank)"
"`$a length: $($a.Length)"
"`$a[2] length: $($a[2].Length)"
"Process `$a[2][1]: $($a[2][1].ProcessName)"
Dans cet exemple, vous créez un tableau unidimensionnel qui contient d’autres tableaux. Il s’agit également d’un tableau en jaquet. La Rank propriété a prouvé qu’il s’agit d’une dimension unique. Pour accéder aux éléments d’un tableau en jaquet, les index doivent être entre crochets distincts ([]
).
$a rank: 1
$a length: 3
$a[2] length: 348
Process $a[2][1]: AcroRd32
Les tableaux multidimensionnels sont stockés dans l’ordre principal des lignes. L’exemple suivant montre comment créer un tableau véritablement multidimensionnel.
[string[,]]$rank2 = [string[,]]::New(3,2)
$rank2.rank
$rank2.Length
$rank2[0,0] = 'a'
$rank2[0,1] = 'b'
$rank2[1,0] = 'c'
$rank2[1,1] = 'd'
$rank2[2,0] = 'e'
$rank2[2,1] = 'f'
$rank2[1,1]
2
6
d
Pour accéder aux éléments d’un tableau multidimensionnel, séparez les index à l’aide d’une virgule (,
) dans un ensemble unique de crochets ([]
).
Certaines opérations sur un tableau multidimensionnel, telles que la réplication et la concaténation, nécessitent que ce tableau soit aplatit. L’aplatissement transforme le tableau en tableau 1 dimensionnel de type nonconstrainé. Le tableau obtenu prend tous les éléments dans l’ordre principal des lignes. Prenons l’exemple suivant :
$a = "red",$true
$b = (New-Object 'int[,]' 2,2)
$b[0,0] = 10
$b[0,1] = 20
$b[1,0] = 30
$b[1,1] = 40
$c = $a + $b
$a.GetType().Name
$b.GetType().Name
$c.GetType().Name
$c
La sortie indique qu’il $c
s’agit d’un tableau 1 dimensionnel contenant les éléments provenant $a
et $b
dans l’ordre principal des lignes.
Object[]
Int32[,]
Object[]
red
True
10
20
30
40
Méthodes de tableaux
Clear
Définit toutes les valeurs d’élément sur la default valeur du type d’élément du tableau. La Clear()
méthode ne réinitialise pas la taille du tableau.
Dans l’exemple $a
suivant, il s’agit d’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 ForEach()
méthode a plusieurs surcharges qui effectuent différentes opérations.
ForEach(scriptblock expression)
ForEach(scriptblock expression, object[] arguments)
ForEach(type convertToType)
ForEach(string propertyName)
ForEach(string propertyName, object[] newValue)
ForEach(string methodName)
ForEach(string methodName, object[] arguments)
ForEach(expression scriptblock)
ForEach(expression scriptblock, arguments object[] )
Cette méthode a été ajoutée dans PowerShell v4.
Remarque
La syntaxe nécessite l’utilisation d’un bloc de script. Les parenthèses sont facultatives si le scriptblock est le seul paramètre. En outre, il ne doit pas y avoir d’espace entre la méthode et la parenthèse ouvrante ou l’accolade.
L’exemple suivant montre comment utiliser la ForEach()
méthode. Dans ce cas, l’intention est de générer la valeur carrée des éléments dans le tableau.
$a = @(0 .. 3)
$a.ForEach({ $_ * $_})
0
1
4
9
Tout comme le paramètre ArgumentList de ForEach-Object
, le arguments
paramètre autorise le passage d’un tableau d’arguments à un bloc de script configuré pour les accepter.
Pour plus d’informations sur le comportement d’ArgumentList, consultez about_Splatting.
ForEach(type convertToType)
La ForEach()
méthode peut être utilisée pour convertir 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 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()
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 paramètre ArgumentList de ForEach-Object
, le arguments
paramètre autorise le passage d’un tableau de valeurs à un bloc de script configuré pour les accepter.
Remarque
À compter 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 peut également être effectuée à l’aide de « Méthodes d’objets et de collections scalaires ». Vous pouvez en savoir plus ici about_Methods.
Where()
Permet de filtrer ou de sélectionner les éléments du tableau. Le script doit évaluer quelque chose de différent de : zéro (0), chaîne $false
vide ou $null
pour que l’élément s’affiche après le Where()
. Pour plus d’informations sur l’évaluation booléenne, consultez about_Booleans.
Il existe une définition pour la Where()
méthode.
Where(scriptblock expression[, WhereOperatorSelectionMode mode
[, int numberToReturn]])
Remarque
La syntaxe nécessite l’utilisation d’un bloc de script. Les parenthèses sont facultatives si le scriptblock est le seul paramètre. En outre, il ne doit pas y avoir d’espace entre la méthode et la parenthèse ouvrante ou l’accolade.
Il Expression
s’agit d’un 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 à partir du filtre.
La valeur de mode
doit être une valeur d’énumération WhereOperatorSelectionMode :
Default
(0
) - Retourner tous les élémentsFirst
(1
) - Renvoyer l’élément firstLast
(2
) - Renvoyer l’élément lastSkipUntil
(3
) - Ignorer la condition d’éléments until a la valeur true, renvoyer tous les éléments restants (y compris l’élément first pour lequel la condition a la valeur true)Until
(4
) - Retourner toutes les conditions d’éléments until a la valeur trueSplit
(5
) - Retourner un tableau de deux éléments- L’élément first contient des éléments correspondants
- Le deuxième élément contient les éléments restants
L’exemple suivant montre comment sélectionner tous les nombres impairs dans le tableau.
(0..9).Where{ $_ % 2 }
1
3
5
7
9
L’exemple suivant montre comment sélectionner toutes les chaînes non vides.
('hi', '', 'there').Where{ $_ }
hi
there
Default
Le Default
mode filtre les éléments à l’aide du Expression
scriptblock.
Si un numberToReturn
élément 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)
Remarque
Le mode et First
le Default
mode retournent les first éléments (numberToReturn
) et peuvent être utilisés de manière interchangeable.
Last
$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 until qu’un objet transmet 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 contient à la fois des éléments qui ne passent pas et 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
Until
Le Until
mode inverse le SkipUntil
mode. Elle retourne tous les éléments d’une collection until qu’un élément transmet l’expression de bloc de script. Une fois qu’un élément passe l’expression scriptblock, la méthode arrête de Where()
traiter les éléments.
Cela signifie que vous recevez l’ensemble first d’éléments non transmis à partir de la Where()
méthode. Une fois qu’un élément est passé, le reste n’est pas testé ou 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
Remarque
Les deux Until
et SkipUntil
fonctionnent sous le principe de NE PAS tester un lot d’éléments.
Until
retourne les éléments BEFORE the firstPASS. SkipUntil
retourne tous les éléments AFTER le firstpassage, y compris l’élément first de passage.
Split
Le Split
mode fractionne 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 une numberToReturn
valeur est spécifiée, la first collection contient 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, sont 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
...
Remarque
Les deux ForEach()
méthodes sont Where()
des membres intrinsèques. Pour plus d’informations sur les membres intrinsèques, consultez about_Intrinsic_Members.
Obtenir les membres d’un tableau
Pour obtenir les propriétés et les méthodes d’un tableau, telles que la Length propriété et la méthode SetValue , utilisez le paramètre InputObject de l’applet Get-Member
de commande.
Lorsque vous dirigez un tableau vers Get-Member
, PowerShell envoie les éléments un à la fois et Get-Member
retourne le type de chaque élément dans le tableau (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 redirigée vers l’applet Get-Member
de commande. La virgule fait du tableau le deuxième élément d’un tableau de tableaux. 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 modifier la valeur du deuxième élément du $a
tableau (position d’index 1) sur 10, tapez :
$a[1] = 10
Vous pouvez également utiliser la méthode SetValue d’un tableau pour modifier une valeur. L’exemple suivant modifie la deuxième valeur (position d’index 1) du $a
tableau à 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 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 $a
tableau, à l’exception 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 une 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 $null
est plus rapide, en particulier pour les grands tableaux.
Tableaux de zéro ou un
À compter de Windows PowerShell 3.0, une collection de zéro ou d’un objet a les propriétés et Length les Count propriétés. En outre, vous pouvez indexer dans un tableau d’un objet. Cette fonctionnalité vous permet d’éviter les erreurs de script qui se produisent lorsqu’une commande qui s’attend à ce qu’une collection obtient moins de deux éléments.
Remarque
Dans Windows PowerShell, les objets créés en castant une table de hachage pour [pscustomobject]
ne pas avoir les propriétés ou Count les Length propriétés.
Toute tentative d’accès à ces membres retourne $null
.
L’exemple suivant montre qu’une variable qui ne contient aucun objet n’a Count et Length de 0.
PS> $a = $null
PS> $a.Count
0
PS> $a.Length
0
L’exemple suivant montre qu’une variable qui contient un objet a un Count et Length de 1. Vous pouvez également utiliser l’indexation de tableau pour accéder à la valeur de l’objet.
PS> $a = 4
PS> $a.Count
1
PS> $a.Length
1
PS> $a[0]
4
PS> $a[-1]
4
Lorsque vous exécutez une commande qui peut renvoyer une collection ou un objet unique, vous pouvez utiliser l’indexation de tableau pour accéder à la valeur de l’objet sans avoir à tester ou à tester les Count Length propriétés. Toutefois, si le résultat est un objet unique (singleton) et que cet objet a une Count ou Length une propriété, la valeur de ces propriétés appartient à l’objet singleton et ne représente pas le nombre d’éléments de la collection.
Dans l’exemple suivant, la commande retourne un objet chaîne unique. La Length chaîne est 4
.
PS> $result = 'one','two','three','four' | Where-Object {$_ -like 'f*'}
PS> $result.GetType().FullName
System.String
PS> $result
four
PS> $result.Count
1
PS❯ $result.Length
4
Si vous souhaitez $result
être un tableau de chaînes, vous devez déclarer la variable en tant que tableau.
Dans cet exemple, $result
il s’agit d’un tableau de chaînes. Le Count tableau et Length le tableau sont 1
, et l’élément first Length est 4
.
PS> [string[]]$result = 'one','two','three','four' |
Where-Object {$_ -like 'f*'}
PS> $result.GetType().FullName
System.String[]
PS> $result
four
PS> $result.Count
1
PS> $result.Length
1
PS> $result[0].Length
4
Indexation de types .NET qui implémentent IDictionary<TKey, TValue>
PowerShell n’appelle pas l’indexeur vrai d’un type pour les types qui implémentent l’interface générique IDictionary<TKey, TValue>
. Au lieu de cela, lorsqu’une clé est donnée, PowerShell teste l’existence de la clé à l’aide TryGetValue()
de , qui retourne $null
quand la clé n’existe pas.
En revanche, si vous appelez l’indexeur true du type à l’aide Item(<key>)
de , la méthode lève une exception quand la clé n’existe pas.
L'exemple suivant illustre la différence.
PS> [Collections.Generic.Dictionary[string, int]]::new()['nosuchkey']
# No output ($null)
PS> [Collections.Generic.Dictionary[string, int]]::new().Item('nosuchkey')
Exception getting "Item": "The given key 'nosuchkey' was not present in the dictionary."
At line:1 char:1
+ [Collections.Generic.Dictionary[string, int]]::new().Item('nosuchkey' ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], GetValueInvocationException
+ FullyQualifiedErrorId : ExceptionWhenGetting
Énumération des accès aux membres
À compter de PowerShell 3.0, lorsque vous utilisez l’opérateur d’accès aux membres pour accéder à un membre qui n’existe pas dans une collection de listes, PowerShell énumère automatiquement les éléments de la collection et tente d’accéder au membre spécifié sur chaque élément. Pour plus d’informations, consultez about_Member-Access_Enumeration.
Exemples
L’exemple suivant crée deux nouveaux fichiers et stocke les objets résultants dans la variable $files
de tableau. Étant donné que l’objet array n’a pas le membre LastWriteTime , la valeur de LastWriteTime est retournée pour chaque élément du tableau.
$files = (New-Item -Type File -Force '/temp/t1.txt'),
(New-Item -Force -Type File '/temp/t2.txt')
$files.LastWriteTime
Friday, June 25, 2021 1:21:17 PM
Friday, June 25, 2021 1:21:17 PM
L’énumération d’accès aux membres vous permet d’obtenir des valeurs à partir d’éléments d’une collection, mais pas de définir des valeurs sur des éléments d’une collection. Par exemple :
$files.LastWriteTime = (Get-Date).AddDays(-1)
The property 'LastWriteTime' cannot be found on this object. Verify that the
property exists and can be set.
At line:1 char:1
+ $files.LastWriteTime = (Get-Date).AddDays(-1)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyAssignmentException
Pour définir les valeurs que vous devez utiliser une méthode.
$files.set_LastWriteTime((Get-Date).AddDays(-1))
$files.LastWriteTime
Thursday, June 24, 2021 1:23:30 PM
Thursday, June 24, 2021 1:23:30 PM
La set_LastWriteTime()
méthode est un membre masqué de l’objet FileInfo . L’exemple suivant montre comment rechercher des méthodes masquéesset
.
$files | Get-Member -Force -Name set_*
TypeName: System.IO.FileInfo
Name MemberType Definition
---- ---------- ----------
Attributes Property System.IO.FileAttributes Attributes {get;set;}
CreationTime Property datetime CreationTime {get;set;}
CreationTimeUtc Property datetime CreationTimeUtc {get;set;}
IsReadOnly Property bool IsReadOnly {get;set;}
LastAccessTime Property datetime LastAccessTime {get;set;}
LastAccessTimeUtc Property datetime LastAccessTimeUtc {get;set;}
LastWriteTime Property datetime LastWriteTime {get;set;}
LastWriteTimeUtc Property datetime LastWriteTimeUtc {get;set;}
Attention
Étant donné que la méthode est exécutée pour chaque élément de la collection, vous devez prendre soin d’appeler des méthodes à l’aide de l’énumération membre.