Comment effectuer une recherche dans un tableau de PowerShell objets et la récupération de l'index pour un correspondant de la chaîne?

J'ai besoin de rechercher un custom PowerShell tableau d'objets (qui comprend des données provenant de deux AD et Exchange - 5 colonnes: mail, dn, extensionAttribute7, TotalItemSize, Comte). Je recueillir des données à ce jour (pour chaque utilisateur, dont le total taille de l'article > taille spécifiée) et de l'exporter vers un fichier XML à l'aide de l'Exportation-Clixml afin que je puisse référence les données dans les jours suivants. Chaque jour, j'ai effectuer une nouvelle recherche pour les boîtes aux lettres > taille spécifiée et enregistrer des données sur la mise en correspondance des boîtes aux lettres, mais j'ai besoin de recouper ma panoplie actuelle des utilisateurs. Si l'utilisateur est déjà dans mon tableau, alors je veux incrémenter le compteur d'attribut dans mon PS objet de 1, sinon, je tiens à ajouter l'utilisateur à mon tableau comme un nouveau PS objet personnalisé. De cette façon, je peux suivre les utilisateurs dont les boîtes aux lettres sont toujours dépasser la taille spécifiée et agir en conséquence (c'est une exigence des clients).

La pièce, je suis mal, c'est la recherche de mon tableau de coutume PS objets pour un match pour déterminer si j'ai besoin d'ajouter l'utilisateur comme un nouvel objet ou tout simplement incrémenter le compteur pour un utilisateur car ils sont déjà dans mon tableau. Au début, je pensais que je pouvais utiliser .IndexOf ou -Contient de trouver une correspondance dans mon tableau mais ils n'apparaissent pas de travailler sur des tableaux contenant des PS des Objets. Le seul moyen que j'ai été en mesure d'obtenir ce travail est comme suit:

#Check to see if this user is already in our master mbxlist array from previous days
$ndx = 0..($mbxlist.length - 1) | Where-Object {$mbxlist[$_].mail -eq $($m.mail)}

$ndx est alors mis à l'index de l'objet correspondant dans mon tableau ou $est la valeur null si il n'y a pas de match. Mais cela ne semble pas très efficace, surtout quand je suis à la recherche à travers un tableau de 1000 des objets pour chaque utilisateur que je suis de vérifier sur une base quotidienne. Il doit sûrement y avoir une meilleure façon de le faire? Je ne pense de créer un tableau de chaînes contenant les utilisateurs mail et ensuite à l'aide d'indexof à vérifier pour un match. J'ai pu déduire que la correspondance PS objet aurait le même numéro d'index de mon tableau de chaînes de caractères et ensuite mettre à jour le comte correspondant ps objet de tableau en conséquence:

# Create an array of strings based on the mail attribute in my PS object array
foreach ($m in $mbxlist) {[array]$lookup += $m.mail.ToString()}

#Search the lookup array for matching email address using IndexOf
$ndx=[array]::indexof($lookup,"joe.bloggs@mydomain,com")

#If ndx > 0 I've got a match so increment the count in the corresponding PS object
If ($ndx -ge 0)
{
    $mbxlist[$ndx].Count = ($mbxlist[$ndx].Count) + 1
}

Serait-ce plus efficace car IndexOf est plus rapide que l'exécution d'un cas d'Objet pour chaque utilisateur, je suis à la recherche d'?

J'ai cherché et testé pendant des jours et je ne peux pas comprendre cela. Je suis relativement nouveau à PowerShell donc je suis probablement manquant quelque chose de vraiment évident. Merci!

InformationsquelleAutor stukey | 2013-12-02