Question compare-object avec une liste import-csv

Plus d'informations
il y a 2 mois 4 semaines #30350 par rhiwotar
Bonjour à tous,

Je suis tombé sur un casse-tête qui vient de me faire perdre mon après-midi

Mon chef m'a demander de comparer une liste en csv que j'ai importé dans csv et une liste d'adresse mail que je suis allais chercher dans exchange online.
$listeExchange = (get-EXOMailbox).emailaddresses -replace "smtp:",""
$listeaverifier = import-csv -Path "C:\Bureau\Adresses Mail à valider.csv" -Delimiter ";" -Encoding UTF8
Compare-Object -ReferenceObject ($listeaverifier)."nouvelle adresse" -DifferenceObject $listeExchange -IncludeEqual |where{$_.SideIndicator -notlike "=>"}

et ça marche pas.

J'ai tenté pleins de trucs, comme passer tous les éléments par un foreach , ajouter le [string] devant les variables, avec du if -like je suis même allé chercher les valeurs identiques
$listeaverifier[0] -like $listeexchange[5]
donc je suis sur que les adresses contenus sont identiques mais le compare ou le if -like me dit false


J'ai fini par faire la liste à la main mais je veux comprendre pourquoi ça marche pas

Si vous avez des idées, je suis preneur !! Merci d'avance!!

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 mois 4 semaines #30351 par Laurent Dardenne
Salut,

rhiwotar écrit: et ça marche pas.
..
je veux comprendre pourquoi ça marche pas

Pour régler ce type de problème il faut au moins un jeu de test.
Ensuite vérifie si les structures de données que tu compares sont identiques. A priori la propriété emailaddresses renvoi une liste d'email séparée par des virgules si je me souviens bien.
Dans ce cas le traitement sera différent, mais pour comprendre ton problème il faut au moins un jeu de test....

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 mois 4 semaines #30354 par rhiwotar
Pour le jeu de test, ça va etre compliqué, c'est des adresses mails pro et si je les anonymise, ça risque de fausser les tests

Dans get-exomailbox, ça me les mets à la suite avec virgules de séparation, c'est pour ça que j'appelle juste sa propriété emailaddress pour qu'il me retourne une liste d'objets, une adresse par ligne, avec le get-type, je vois bien que tout le monde est en string, sur une liste comme sur l'autre
J'ai même enlevé les espaces en trop sur le csv car mon chef en à rajouter automatiquement pour avoir toujours le même nombre de caractères, ça change rien,

Je me demande si ça peut-être dû à l'encodage du CSV, je l'ai importer avec la valeur par défaut et avec le -encoding UTF-8, possible que cela joue?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 mois 4 semaines #30355 par Laurent Dardenne

rhiwotar écrit: Pour le jeu de test, ça va etre compliqué

A voir :
#$listeExchange = (get-EXOMailbox).emailaddresses -replace "smtp:",""
$listeExchange = @('smtp:un@a.com,deux@b.com','smtp:trois@c.com,quatrex@d.com') -replace "smtp:",""
#$listeaverifier = import-csv -Path "C:\Bureau\Adresses Mail à valider.csv" -Delimiter ";" -Encoding UTF8
$listeaverifier=@([PSCustomObject]@{'nouvelle adresse'='un@a.com'};[PSCustomObject]@{'nouvelle adresse'='autre@autre.com'})
Compare-Object -ReferenceObject ($listeaverifier)."nouvelle adresse" -DifferenceObject $listeExchange -IncludeEqual |where {$_.SideIndicator -notlike "=>"}

rhiwotar écrit: c'est pour ça que j'appelle juste sa propriété emailaddress pour qu'il me retourne une liste d'objets, une adresse par ligne

Ok

rhiwotar écrit: une adresse par ligne

Ok, mais pour les adresses contenues dans le fichier CSV, enfin à priori.
Peux-tu m'indiquer quelle ligne effectue ce traitement pour les adresses Exchange?

Un petit changement :
#$listeExchange = (get-EXOMailbox).emailaddresses -replace "smtp:",""
$listeExchange = @('smtp:un@a.com,deux@b.com','smtp:trois@c.com,quatrex@d.com') -replace "smtp:","" -split ','
#$listeaverifier = import-csv -Path "C:\Bureau\Adresses Mail à valider.csv" -Delimiter ";" -Encoding UTF8
$listeaverifier=@([PSCustomObject]@{'nouvelle adresse'='un@a.com'};[PSCustomObject]@{'nouvelle adresse'='autre@autre.com'})
Compare-Object -ReferenceObject ($listeaverifier)."nouvelle adresse" -DifferenceObject $listeExchange -IncludeEqual |where {$_.SideIndicator -notlike "=>"}

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.139 secondes
Propulsé par Kunena