Question doublons

Plus d'informations
il y a 12 ans 2 semaines #17110 par Damien GRECOURT
doublons a été créé par Damien GRECOURT
Bonjour,

Je sollicite votre aide pour résoudre le problème que je rencontre.

Tout d'abord le bout de code :
[code:1]$DeviceView = @()
foreach($NetworkDevice in $NetworkDevices | ? {$_.ConnexionStatus -eq \"OK\"}){
Write-host \"NetworkDevice : $($NetworkDevice.DeviceId) $($NetworkDevice.IpAddress) $($NetworkDevice.MacAddress) $($NetworkDevice.IsOnline) $($NetworkDevice.ConnexionStatus)\"
$DeviceId = $NetworkDevice.DeviceId
## Pour chacun des éléments du tableau, sauf celui sélectionné, on récupère l'adresse MAC.
$NetworkDevices | ? {($_.ConnexionStatus -eq \"OK\"«») -and ($_.DeviceId -ne $DeviceId)} | % {
$MacAddress = $_.MacAddress
$IpAddress = $_.IpAddress
Write-host \"Result : $DeviceId $IpAddress $MacAddress\"
## On filtre sur l'équipement sélectionné et on recherche les adresses MAC des autres équipements.
$MagicBox | sort-object | get-unique -AsString | ? {($_.DeviceId -eq $DeviceId) -and ($_.MacAddress -eq $MacAddress)} | % {
$Interface = $_.Interface
Write-host \"Search Result : $IpAddress $MacAddress $Interface\"
$DeviceView += addHashToDeviceView -DeviceId $DeviceId -IpAddress $IpAddress -MacAddress $MacAddress -Interface $Interface
}
}
}[/code:1]
J'utilise des hash que je stocke dans des tableaux pour mes données (cf. plus bas, la méthode addHashToDeviceView).
Je parcours donc un tableau qui contient tous les équipements de type réseau (switch, routeur, etc...).
Pour chaque élément, je parcours ce même tableau en prenant soin de ne pas utiliser l'équipement sélectionné dans la boucle précédente.
Ensuite, pour chaque résultat, je parcours un autre tableau pour récupérer l'interface sur laquelle l'équipement est connecté.
Le but étant d'identifier pour chaque équipement, sur quelle interface il voit les autres équipements.

Mon problème ? Get-unique me retourne 2 lignes identiques.
Le résultat ci-dessous :
[code:1]DeviceId IpAddress MacAddress Interface



SW-B-3F65-107 x.x.x.x 1cdf.0f46.e5ba Gi0/24
SW-B-3F65-107 x.x.x.x 1cdf.0f46.e5ba Gi0/24 [/code:1]

Le contenu de $MagicBox avant le filtre :
[code:1]DeviceId MacAddress Interface


SW-B-3F65-107 d8d3.855d.a58c Gi0/1
SW-B-3F65-107 0015.5d3f.6500 Gi0/1
SW-B-3F65-107 0015.5d3f.6502 Gi0/1
SW-B-3F65-107 d8d3.855d.3674 Gi0/2
SW-B-3F65-107 d8d3.855d.a58d Gi0/3
SW-B-3F65-107 0015.5d3f.6501 Gi0/4
SW-B-3F65-107 7071.bcbe.b532 Gi0/6
SW-B-3F65-107 5cf3.fcd4.a925 Gi0/9
SW-B-3F65-107 2c41.38b7.ab60 Gi0/13
SW-B-3F65-107 001a.643d.bd04 Gi0/15
SW-B-3F65-107 001a.64ef.f3f8 Gi0/17
SW-B-3F65-107 0003.560e.15ca Gi0/19
SW-B-3F65-107 4083.de1e.be09 Gi0/21
SW-B-3F65-107 001a.643d.bd2b Gi0/23
SW-B-3F65-107 1cdf.0f46.e5ba Gi0/24
SW-B-3F65-107 1cdf.0f46.e5ba Gi0/24
SW-B-3F65-107 1cdf.0f46.e5ba Gi0/24 [/code:1]

Pour complément d'information, la méthode addHashToDeviceView :
[code:1]function addHashToDeviceView{
param(
[String]$DeviceId,
[String]$IpAddress,
[String]$MacAddress,
[String]$Interface
)
$Array = new-object PSObject
$Array | add-member -Name \"DeviceId\" -MemberType NoteProperty -Value \"$DeviceId\"
$Array | add-member -Name \"IpAddress\" -MemberType NoteProperty -Value \"$IpAddress\"
$Array | add-member -Name \"MacAddress\" -MemberType NoteProperty -Value \"$MacAddress\"
$Array | add-member -Name \"Interface\" -MemberType NoteProperty -Value \"$Interface\"
return $Array
}[/code:1]

En espérant avoir été clair et mis suffisament d'informations.

Votre aide serait la bienvenue.

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

Plus d'informations
il y a 12 ans 2 semaines #17113 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:doublons
Salut,
peut être as-tu un pb de casse avec tes données:
[code:1]
'toto','Toto'|get-unique -AsString
#toto
#Toto

'toto','toto'|get-unique -AsString
#toto
[/code:1]

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 2 semaines #17114 par Damien GRECOURT
Réponse de Damien GRECOURT sur le sujet Re:doublons
Bonjour,

Je vais vérifier la piste de la casse à partir du fichier de sortie en faisant un get-content monFichier | get-unique.
Je n'ai plus de doublons dans ce cas là (j'ai pas compris pourquoi, mais bon).

En revanche, j'ai trouvé une façon détournée de faire ce que je voulais en utilisant le cmdlet Group-object:
[code:1]$MagicBox | Group-Object -Property MacAddress,Interface,DeviceId | % {
$_.Group[0] | ? {($_.DeviceId -eq $DeviceId) -and ($_.MacAddress -eq $MacAddress)} | % {
$Interface = $_.Interface
Write-host \"Search Result : $DeviceId $IpAddress $MacAddress $Interface $($_.DeviceId)\"
$DeviceView += addHashToDeviceView -DeviceId $DeviceId -IpAddress $IpAddress -MacAddress $MacAddress -Interface $Interface
}
}[/code:1]
Le résultat est le suivant :
[code:1]Count Name Group
----
1 0003.560e.15ca {@{DeviceId=SW-B-3F65-107; MacAddress=0003.560e.15ca; Interface=Gi0/19}}
1 0015.5d3f.6500 {@{DeviceId=SW-B-3F65-107; MacAddress=0015.5d3f.6500; Interface=Gi0/1}}
1 0015.5d3f.6501 {@{DeviceId=SW-B-3F65-107; MacAddress=0015.5d3f.6501; Interface=Gi0/4}}
1 0015.5d3f.6502 {@{DeviceId=SW-B-3F65-107; MacAddress=0015.5d3f.6502; Interface=Gi0/1}}
1 001a.643d.bd04 {@{DeviceId=SW-B-3F65-107; MacAddress=001a.643d.bd04; Interface=Gi0/15}}
1 001a.643d.bd2b {@{DeviceId=SW-B-3F65-107; MacAddress=001a.643d.bd2b; Interface=Gi0/23}}
1 001a.64ef.f3f8 {@{DeviceId=SW-B-3F65-107; MacAddress=001a.64ef.f3f8; Interface=Gi0/17}}
3 1cdf.0f46.e5ba {@{DeviceId=SW-B-3F65-107; MacAddress=1cdf.0f46.e5ba; Interface=Gi0/24}, @{DeviceId=SW-B-3F65-107; MacAddress=1cdf.0f46.e5ba; Interface=...
1 2c41.38b7.ab60 {@{DeviceId=SW-B-3F65-107; MacAddress=2c41.38b7.ab60; Interface=Gi0/13}}
1 4083.de1e.be09 {@{DeviceId=SW-B-3F65-107; MacAddress=4083.de1e.be09; Interface=Gi0/21}}
1 5cf3.fcd4.a925 {@{DeviceId=SW-B-3F65-107; MacAddress=5cf3.fcd4.a925; Interface=Gi0/9}}
1 7071.bcbe.b532 {@{DeviceId=SW-B-3F65-107; MacAddress=7071.bcbe.b532; Interface=Gi0/6}}
1 d8d3.855d.3674 {@{DeviceId=SW-B-3F65-107; MacAddress=d8d3.855d.3674; Interface=Gi0/2}}
1 d8d3.855d.a58c {@{DeviceId=SW-B-3F65-107; MacAddress=d8d3.855d.a58c; Interface=Gi0/1}}
1 d8d3.855d.a58d {@{DeviceId=SW-B-3F65-107; MacAddress=d8d3.855d.a58d; Interface=Gi0/3}} [/code:1]
A partir de ce résultat, il ne reste plus qu'à utiliser l'élément 0 du tableau contenu dans Group quelque soit le nombre de doublons.

Je vais tester tout ça sur un réseau plus consistant pour vérifier que je n'ai pas problème quand j'ai plus d'équipements.

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

Plus d'informations
il y a 12 ans 2 semaines #17115 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:doublons
Wagga écrit:

Je n'ai plus de doublons dans ce cas là (j'ai pas compris pourquoi, mais bon).

L'encodage peut aussi jouer des tours , un exemple . A vérifier...

Tutoriels PowerShell

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

Plus d'informations
il y a 12 ans 2 semaines #17116 par Damien GRECOURT
Réponse de Damien GRECOURT sur le sujet Re:doublons
Ok, l'encodage joue des tours c'est certains, ça m'est déjà arrivé.

Néanmoins, la source des données que j'essaye de filtrer est la même (Get-content sur le fichier de sortie Telnet).

Par contre, j'ai pas compris l'exemple avec les balloon tips. Où veux-tu en venir ?

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

Plus d'informations
il y a 12 ans 2 semaines #17117 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:doublons
Wagga écrit:

Néanmoins, la source des données que j'essaye de filtrer est la même (Get-content sur le fichier de sortie Telnet).

D'accord, c'était au cas où.
Wagga écrit:

Par contre, j'ai pas compris l'exemple avec les balloon tips. Où veux-tu en venir ?

Le code de l'exemple reproduit le bug de l'encodage cité, j'ai effectivement oublié de le préciser.
Un copié/collé directement de la page du site provoque des msgs d'erreurs incompréhensible de prime abord, car le rendu est identique, mais pas l'encodage.

Tutoriels PowerShell

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

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