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 de types différents.

À compter de Windows PowerShell 3.0, une collection de zéro ou d’un objet a des 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 (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 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é, c’est-à-dire un tableau qui peut contenir uniquement des valeurs d’un type particulier, castez la variable en tant que type de tableau, tel que 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 :

[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 .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 la production de l’instruction à l’intérieur de l’opérateur, l’opérateur la 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 d’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 que vous ne savez pas combien 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 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, vous devez taper :

$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 lors de l’utilisation de 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 que $a[0..-2] fait référence à tous les éléments du tableau, à l’exception du dernier. Il fait référence aux premier, dernier et avant-dernier éléments 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 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 boucle, 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 dans 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 seule dimension. Même lorsque vous pensez créer 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 déchiqueté. La Rank propriété a prouvé qu’il s’agit d’une dimension unique. Pour accéder aux éléments d’un tableau en dentelée, 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 des lignes principales. 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 aplati. L’aplatissement transforme le tableau en tableau à 1 dimension de type sans contrainte. 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 montre qu’il $c s’agit d’un tableau à 1 dimension contenant les éléments de $a et $b dans l’ordre de ligne principale.

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

Notes

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 ou l’accolade ouvrante.

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, 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 permet de passer un tableau de valeurs à 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 .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]])

Notes

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 ou l’accolade ouvrante.

Est Expression un scriptblock requis pour le filtrage, l’argument mode facultatif permet 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.

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 true, retourner tous les éléments restants (y compris le premier élément pour lequel la condition est vraie)
  • Until (4) - Retourner 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 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 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.

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

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 transmet l’expression scriptblock, la méthode cesse de Where() traiter les éléments.

Cela signifie que vous recevez le premier ensemble d’éléments non transmis par la Where() méthode . Une fois qu’un élément est réussi, les autres ne sont PAS testés ou retournés.

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 le premier PASS. 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, 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
...

Notes

Les ForEach() méthodes et Where() sont 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 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 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 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 une valeur au $null 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 les Count propriétés 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.

L’exemple suivant montre qu’une variable qui ne contient aucun objet a un 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 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 dans la collection.

Dans l’exemple suivant, la commande retourne un objet de chaîne unique. de Length 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 souhaitez $result être un tableau de chaînes, vous devez déclarer la variable en tant que tableau.

Dans cet exemple, $result est un tableau de chaînes. Le Count et Length du tableau est 1, et le 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 System.Tuple Objets

PowerShell 6.1 a ajouté la prise en charge de l’accès indexé aux Tuple objets, comme pour 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 transmis via le pipeline ou par des paramètres qui prennent en charge des tableaux d’objets.

Pour plus d’informations, consultez System.Tuple.

Indexation des 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 attribuée, 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 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 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 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 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;}

Attention

Étant donné que la méthode est exécutée pour chaque élément de la collection, vous devez faire attention lors de l’appel de méthodes à l’aide de l’énumération des membres.

Voir aussi