souvent, lors de l’écriture de scripts PowerShell, vous avez besoin d’un moyen de stocker un ensemble d’éléments. Une façon courante d’y parvenir consiste à utiliser un tableau ou un type spécifique appelé ArrayList. Mais qu’est ce qu’un tableau de toute façon? Un tableau est une structure de données conçue pour stocker une collection d’éléments. Cela peut inclure à la fois des types d’articles identiques et différents.

Les tableaux sont utilisés dans de nombreux langages de programmation différents et PowerShell n’est pas différent. Il existe de nombreuses façons de créer, manipuler et optimiser des tableaux., Dans cet article, vous en apprendrez plus sur les ArrayLists, les tableaux et les Collections, ainsi que sur certaines bonnes pratiques lors de leur application avec PowerShell.

table des matières

prérequis/exigences

puisque vous ne travaillerez qu’avec le langage PowerShell lui-même, il n’y a pas de prérequis environnementaux. Vous avez juste besoin d’avoir un PC Windows avec PowerShell. Plus précisément:

  • Windows PowerShell 3 ou version ultérieure
  • . NET Framework 4.5 ou version ultérieure

Vous voulez plus de conseils comme celui-ci?, Découvrez mon PowerShell blog: https://nkasco.com/FriendsOfATA

Création de Tableaux avec PowerShell

Il existe de nombreuses façons de créer des tableaux avec PowerShell. Supposons que vous ayez une liste de noms que vous devez traiter d’une manière ou d’une autre, comme indiqué ci-dessous.

JohnSusieJimJohnnyCarrie

construire des tableaux via des éléments séparés par des virgules

la façon la plus simple de créer un tableau consiste simplement à affecter des entrées connues, séparées par des virgules, à une variable comme indiqué ci-dessous.,

$BasicArray = "John", "Susie", "Jim", "Johnny", "Carrie"

Si vous exécutez la méthodeGetType() disponible sur tous les objets dans PowerShell, vous verrez que vous avez créé avec succès un tableau comme indiqué par la propriétéBaseType ci-dessous.

PS51> $BasicArray.GetType()IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object System.Array

en utilisant l’opérateur de sous-Expression

Vous pouvez également créer des tableaux dans PowerShell via un opérateur de sous-expression. Ce concept est couramment utilisé lorsque vous ne savez pas combien d’éléments seront ajoutés à votre tableau. Le résultat peut contenir zéro ou plusieurs éléments lorsqu’il est créé.,

notez ci-dessous un tableau appelé$MyArray a été créé avec zéro élément à l’intérieur.

#Create an empty array with the sub-expression operatorPS51> $MyArray = @()PS51> $MyArray.count0

en utilisant l’opérateur Range

Les tableaux ne sont pas simplement relégués au stockage de chaînes comme indiqué ci-dessus. Vous pouvez également créer des tableaux avec d’autres types d’objets tels que des entiers.

Si vous avez besoin d’un tableau d’entiers dans l’ordre séquentiel, vous pouvez prendre un raccourci et de l’utilisation de la plage .. opérateur. Ci-dessous, vous pouvez voir un tableau a été créé avec les entiers 2 à 5 avec une seule ligne de code.,

PS51> $NumberedArray = 2..5PS51> $NumberedArray2345

la création de Collections PowerShell ArrayList

L’utilisation D’une PowerShell ArrayList est également un moyen de stocker une liste d’éléments avec PowerShell. La classe ArrayList fait partie du système.Collections namespace within. NET. en créant un nouvel objet de ce type, vous pouvez ensuite stocker des objets dans une ArrayList.

ci-dessous, vous pouvez voir que vous devez créer explicitement un objet ArrayList en utilisant l’applet de commandeNew-Object ou en convertissant un tableau standard en un objet ArrayList.,

notez que dans ce cas, leBaseType est un objet alors que les exemples ci-dessus ont des BaseTypes de tableaux qui présentent un héritage de la classe Object. En fin de compte, PowerShell fournit un accès au système de type.net.

l’Ajout d’Éléments À Un Tableau

Lors de la création d’un tableau, vous pouvez définir tous les éléments au moment de la création ou de les ajouter ad-hoc.

pour ajouter des éléments À une collection existante, vous pouvez utiliser la balise += opérateur ou le Add méthode. Mais sachez qu’il existe des différences majeures dans leur fonctionnement.,

lorsque vous créez un tableau standard avec@(), vous utiliserez l’opérateur+= mais pour ajouter des éléments à une ArrayList, vous utiliserez la méthodeAdd. Ces méthodes diffèrent en ce que l’opérateur+= détruit réellement le tableau existant et en crée un nouveau avec le nouvel élément.

pour démontrer, vous verrez ci-dessous que vous pouvez référencer la propriété IsFixedSize pour qu’un tableau ou ArrayList sache lequel est immuable et lequel ne l’est pas.,

PS51> $BasicArray.IsFixedSizeTruePS51> $MyArrayList.IsFixedSizeFalse

étant donné qu’un tableau de base est une collection de taille fixe, vous ne pouvez pas le modifier.

tenter d’utiliser la méthodeAdd() avec un tableau de taille fixe entraînera une erreur en raison de la taille fixe. Ci-dessous vous pouvez voir quelques exemples dans lesquels vous pouvez ajouter des éléments à un tableau.

#Does NOT work$BasicArray.Add("Nate")#Works$BasicArray += "Nate"$MyArrayList.Add("Nate")$MyArrayList += "Nate"

Suppression D’Éléments dans Un Tableau

Maintenant que vous avez une meilleure compréhension de la façon d’ajouter des éléments à un tableau, nous allons couvrir quelques façons dont vous pouvez supprimer des éléments d’un tableau.,

comme un tableau de base est corrigé, vous ne pouvez pas en supprimer des éléments. Au lieu de cela, vous devez créer un tableau entièrement nouveau. Par exemple, vous pouvez supprimer un seul élément d’un tableau en créant une instruction conditionnelle qui ne correspond qu’aux éléments que vous souhaitez inclure. Un exemple est montré ci-dessous.

$NewBasicArray = $BasicArray -ne "Nate"

étant donné qu’une ArrayList n’est pas fixe, vous pouvez en supprimer des éléments en utilisant la méthodeRemove(). C’est un scénario dans lequel l’utilisation d’une ArrayList peut vous être bénéfique si vous prévoyez d’Ajouter/Supprimer fréquemment des éléments.,

$MyArrayList.Remove("Nate")

récupération D’éléments spécifiques D’un tableau ou D’une ArrayList

pour récupérer des éléments spécifiques d’un tableau ou D’une ArrayList, vous pouvez utiliser de nombreuses méthodes différentes. Comme beaucoup d’autres objets dans PowerShell, vous pouvez accéder à tous les éléments d’un tableau en appelant simplement l’objet.

PS51> $BasicArrayJohnSusieJimJohnnyCarrie

peut-être avez-vous besoin de récupérer uniquement le premier élément, les tableaux auront toujours une origine de 0 représentant le premier élément du tableau. Pour récupérer le premier élément d’un tableau, spécifiez le numéro d’index entre crochets, comme illustré ci-dessous.,

PS51> $BasicArrayJohn

inversement, vous pouvez également référencer les index vers l’arrière en utilisant un tiret (indicateur négatif) pour appeler le dernier nombre X d’éléments du tableau. Une façon courante de trouver le dernier élément dans un tableau est d’utiliser -1 comme indiqué ci-dessous.

PS51> $BasicArrayCarrie

l’opérateur de plage que vous avez appris ci-dessus peut également être utilisé pour récupérer des objets d’un tableau en suivant la même méthode d’appel des éléments. Supposons que vous souhaitiez récupérer les quatre premiers noms dans le tableau $BasicArray.,

Vous pouvez voir ci-dessous que vous pouvez spécifier une plage d’index 0-3 qui retournera les quatre premiers éléments.

PS51> $BasicArrayJohnSusieJimJohnny

optimisation des tableaux avec PowerShell

maintenant que vous avez une bonne base sur la façon de créer et de manipuler des tableaux, lequel devriez-vous utiliser? Pour répondre à cela, parcourons quelques exemples avec l’applet de commande Measure-Command. En utilisant l’applet de commande Measure-Command, vous comprendrez mieux combien de temps les commandes prennent pour traiter les éléments lorsqu’ils sont transmis dans le pipeline.,

de manière générale, si vous avez une petite collection d’objets, vous ne remarquerez probablement pas beaucoup de différence avec la façon dont vous manipulez vos tableaux. Toutefois, si vous avez une grande collection d’objets, il est important de comprendre les différences d’obtenir des résultats optimaux.

appliquons ce que vous venez d’apprendre dans la section précédente sur la différence entre+= et en utilisant la méthodeAdd() avec une boucle de 50 000 éléments.

tout d’abord, créez un tableau vide et une liste de tableaux vide comme indiqué ci-dessous.,

PS51> $MyArray = @()PS51> $MyArrayList = @()

ensuite, remplissez 50 000 éléments dans chaque collection en utilisant l’opérateur range et une boucle foreach comme indiqué ci-dessous.

@(0..50000).foreach({$MyArray += $_})@(0..50000).foreach({$MyArrayList.Add($_)})

Enfin, enveloppez vos commandes dans une expression et de l’expression de la balise Measure-Command applet de commande. En exécutant l’expression avec Measure-Command, vous pouvez voir combien de temps chaque processus prend réellement pour s’exécuter.

Gardez à l’esprit que, comme vous l’avez appris avant, += en fait, crée un nouveau tableau, plutôt que d’ajouter à un fixe.,

Le résultat? Près de 60 secondes contre 139 millisecondes!

comme vous pouvez le voir, il est beaucoup plus rapide de tirer parti d’une ArrayList pour les grandes collections plutôt que d’utiliser un tableau de taille fixe.

bien qu’il s’agisse d’un exemple de base, il souligne l’importance de comprendre ce que fait votre code pendant le traitement. S’il n’est pas bien compris, cela peut entraîner une mauvaise expérience utilisateur.,

Si vous avez un script existant qui pourrait bénéficier de l’utilisation D’une ArrayList plutôt que d’un tableau, cela présenterait une opportunité fantastique de faire une amélioration du jour au lendemain!

Lecture

  • la Comparaison des tableaux avec PowerShell
  • Comment Créer des Tableaux de Performances dans les PowerShell (MCPmag)

Voulez plus de conseils de ce genre? Consultez mon blog PowerShell personnel à: https://nkasco.com/FriendsOfATA.