about_Arrays

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 (entières) 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 uniques 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 7, tapez :

$B = ,7

Vous pouvez également créer et initialiser un tableau à l’aide de l’opérateur range (..). 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.

Lorsqu’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é, c’est-à-dire un tableau qui ne peut contenir que des valeurs d’un type particulier, convertissez la variable en un 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:

[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 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 de tableau crée un tableau à partir des instructions qu’il contient. Quoi que l’instruction à l’intérieur de l’opérateur produise, l’opérateur la place dans un tableau. Même s’il n’y a aucun objet ou un seul 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:

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

L’opérateur array est utile dans les scripts lorsque vous obtenez des objets, mais que vous ne savez pas combien en 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 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, appelez le nom du tableau. Par exemple, $a est un tableau des nombres de 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 parenthèses. Les valeurs d’index commencent à 0. 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 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 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 effectue une itération 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 tout en examinant les é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 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

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

Renvoie le nombre de dimensions dans le tableau. La plupart des tableaux dans PowerShell n’ont qu’une seule dimension. Même si vous pensez que vous construisez 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. Ceci est également connu sous le nom de tableau dentelé. La Rank propriété a prouvé qu’il s’agit d’une unidimensionnalité. Pour accéder aux éléments d’un tableau dentelé, les index doivent être placés entre crochets séparés ([]).

$a rank: 1
$a length: 3
$a[2] length: 348
Process $a[2][1]: AcroRd32

Les tableaux multidimensionnels sont stockés dans l’ordre des rangées. 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 seul ensemble de crochets ([]).

Certaines opérations sur un tableau multidimensionnel, telles que la réplication et la concaténation, nécessitent que ce tableau soit aplati. L’aplatissement transforme le tableau en un tableau à 1 dimension de type non contraint. Le tableau résultant prend en charge tous les éléments dans l’ordre des rangées principales. 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

Le résultat montre que $c est un tableau à 1 dimension contenant les éléments de et $a dans l’ordre principal des $b lignes.

Object[]
Int32[,]
Object[]
red
True
10
20
30
40

Méthodes des tableaux

Clear

Définit toutes les valeurs des éléments à 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 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

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 comporte 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 de 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. De plus, il ne doit pas y avoir d’espace entre la méthode et la parenthèse ouvrante ou l’attelle.

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 du tableau.

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

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

Pour plus d'informations sur le comportement d'ArgumentList, voir about_Splatting.

ForEach(type convertToType)

La ForEach() méthode peut être utilisée pour convertir les éléments dans un type différent ; 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 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, 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 paramètre ArgumentList de ForEach-Object, le arguments paramètre permet de passer un tableau de valeurs à 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 des objets scalaires et des collections ». Vous pouvez en savoir plus à ce sujet ici about_Methods.

où()

Permet de filtrer ou de sélectionner les éléments du tableau. Le script doit être évalué à quelque chose de différent de : zéro (0), une 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 y a une définition de 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. De plus, il ne doit pas y avoir d’espace entre la méthode et la parenthèse ouvrante ou l’attelle.

Il Expression s’agit d’un bloc de script requis pour le filtrage, l’argument mode facultatif permet des capacités de sélection supplémentaires et l’argument numberToReturn facultatif permet de limiter le nombre d’éléments renvoyés par le filtre.

La valeur de doit être une valeur d’énumération mode :

  • Default (0) - Retourner tous les articles
  • First (1) - Retourner le premier élément
  • Last (2) - Retourner le dernier élément
  • SkipUntil (3) : sautez 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 est vraie)
  • Until (4) - Renvoyer tous les éléments jusqu’à ce que la condition soit vraie
  • Split (5) - Renvoie 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 du tableau.

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

Cet exemple montre comment sélectionner les chaînes qui ne sont pas vides.

('hi', '', 'there').Where({$_.Length})
hi
there

Default

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.

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 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 contient à 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

Until

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 recevez le premier ensemble d’éléments non-passing de la méthode Where(). Une fois qu’un article a réussi, les autres ne sont PAS testés ou retournés.

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 retourne les éléments BEFORE le premier PASS. SkipUntil retourne tous les éléments AFTER le premier pass, y compris le premier élément passant.

Split

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 un numberToReturn est spécifié, la première collection contient les éléments passing, sans dépasser la valeur spécifiée.

Les objets restants, même ceux qui passent le filtre d’expression, sont 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
...

Remarque

Les deux ForEach() méthodes sont Where() des membres intrinsèques. Pour plus d’informations sur les membres intrinsèques, reportez-vous à la 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 propriété et la Length 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 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 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 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 de $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

À partir de Windows PowerShell 3.0, une collection de zéro ou d’un objet possède les Count propriétés et 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.

L’exemple suivant montre qu’une variable qui ne contient aucun objet a et CountLength 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 et CountLength 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 susceptible de renvoyer une collection ou un seul objet, vous pouvez utiliser l’indexation de tableau pour accéder à la valeur de l’objet sans avoir à tester les Count propriétés ou Length . Toutefois, si le résultat est un objet unique (singleton) et que cet objet a une Count propriété ou Length , 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 renvoie un seul objet chaîne. Le Length de cette 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 voulez $result être un tableau de chaînes, vous devez déclarer la variable sous la forme d’un tableau.

Dans cet exemple, $result il s’agit d’un tableau de chaînes. La Count et la Length du tableau sont 1, et la Length du 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 le système.Tuple Objets

PowerShell 6.1 a ajouté la prise en charge de l’accès indexé aux 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 autres objets de collection, Tuple les objets sont traités comme un objet unique lorsqu’ils sont passés par le pipeline ou par des paramètres qui prennent en charge des tableaux d’objets.

Pour plus d’informations, consultez Système.Tuple

Indexation des types .NET qui implémentent IDictionary<TKey, TValue>

PowerShell n’appelle pas le véritable indexeur d’un type pour les types qui implémentent l’interface générique IDictionary<TKey, TValue> . Au lieu de cela, lorsqu’on lui donne une clé, PowerShell teste l’existence de la clé à l’aide TryGetValue()de , qui retourne $null lorsque la clé n’existe pas.

En revanche, si vous appelez le véritable indexeur du type à l’aide Item(<key>)de , la méthode lève une exception lorsque 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 de l’accès des 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 membre LastWriteTime , la valeur de LastWriteTime est renvoyé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 membre vous permet d’obtenir des valeurs à partir des éléments d’une collection, mais pas à définir des valeurs sur les é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, 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 membres qui ont une méthode masquéeset .

$files | Get-Member | Where-Object Definition -like '*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;}

Avertissement

Étant donné que la méthode est exécutée pour chaque élément de la collection, des précautions doivent être prises lors de l’appel de méthodes à l’aide de l’énumération des membres.

Voir aussi