Question
doublons
- Damien GRECOURT
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 11
- Remerciements reçus 0
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.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 2 semaines #17113
par Laurent Dardenne
Tutoriels PowerShell
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]
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.
- Damien GRECOURT
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 11
- Remerciements reçus 0
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.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 2 semaines #17115
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:doublons
Wagga écrit:
L'encodage peut aussi jouer des tours , un exemple . A vérifier...Je n'ai plus de doublons dans ce cas là (j'ai pas compris pourquoi, mais bon).
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Damien GRECOURT
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 11
- Remerciements reçus 0
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 ?
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 2 semaines #17117
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:doublons
Wagga écrit:
Wagga écrit:
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.
D'accord, c'était au cas où.Néanmoins, la source des données que j'essaye de filtrer est la même (Get-content sur le fichier de sortie Telnet).
Wagga écrit:
Le code de l'exemple reproduit le bug de l'encodage cité, j'ai effectivement oublié de le préciser.Par contre, j'ai pas compris l'exemple avec les balloon tips. Où veux-tu en venir ?
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
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- doublons