Partager via


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 le premier élément du $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 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 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 du dernier. Il fait référence aux éléments premier, dernier et second à dernier du 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, foret 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 itère dans le tableau et retourne chaque valeur du tableau jusqu’à atteindre 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 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

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 valeur par défaut 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)

Lastly, 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éments
  • First (1) - Retourner le premier élément
  • Last (2) - Retourner le dernier élément
  • SkipUntil (3) - Ignorer les éléments jusqu’à ce que la condition soit vraie, renvoyez tous les éléments restants (y compris le premier élément pour lequel la condition a la valeur true)
  • Until (4) - Renvoyer tous les éléments jusqu’à ce que la condition soit true
  • Split (5) - Retourner un tableau de deux éléments
    • Le premier élément 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 premiersnumberToReturn () éléments 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 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 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 jusqu’à ce qu’un élément passe 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 le premier ensemble 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 first PASS. SkipUntil retourne tous les éléments AFTER le premier passage, y compris le premier élément 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 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, 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_Instrinsic_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.

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 est Length 1et le Length premier élément 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

Prise en charge de l’indexation pour System.Tuple Objets

PowerShell 6.1 a ajouté la prise en charge de l’accès indexé des Tuple objets, comme les tableaux. Par exemple :

PS> $tuple = [Tuple]::Create(1, 'test')
PS> $tuple[0]
1
PS> $tuple[1]
test
PS> $tuple[0..1]
1
test
PS> $tuple[-1]
test

Contrairement aux tableaux et à d’autres objets de collection, Tuple les objets sont traités comme un objet unique lorsqu’ils sont transmis via le pipeline ou par des paramètres qui prennent en charge les tableaux d’objets.

Pour plus d’informations, consultez System.Tuple.

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')
GetValueInvocationException: Exception getting "Item": "The given key 'nosuchkey'
 was not present in the dictionary."

É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 $filesde tableau. Étant donné que l’objet tableau n’a pas le Lastmembre WriteTime, la valeur d’WriteTime Last 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)
InvalidOperation: The property 'LastWriteTime' cannot be found on this object.
Verify that the property exists and can be set.

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.

Voir aussi