Question
[Résolu] Tri d'information MAC Address
- Icarus
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 4
- Remerciements reçus 0
Je confectionne un script permettant de récupérer tout un tas d'informations sur un poste client.
Pas très original mais efficace quand dans une entreprise il n'y a pas de domaine ni serveur ni rien..
Jusque là tout va bien, mon problème est plutôt de l'ordre de traitement d'information.
En effet j'ai toutes sortes de codes et fonctions me permettant de récupérer les adresses mac ainsi que des informations diverses sur les cartes réseaux du poste, mais je n'arrive pas à récupérer UNE SEULE adresse mac de la seule et unique carte réseau utilisé !!
Exemple de code :
[code:1]function Get-MACAddress {
param($pc = (get-content env:computername))
$colItems = get-wmiobject -class \"Win32_NetworkAdapterConfiguration\" -computername $pc |Where{$_.IpEnabled -Match \"True\"}
foreach ($objItem in $colItems) {
$objItem |select Description,MACAddress
}
}[/code:1]
Résultat sur mon poste :
[code:1]Description MACAddress
Realtek PCIe GBE Family Controller 34:64:A9:31:B7:5C
VirtualBox Host-Only Ethernet Adapter 0A:00:27:00:00:0E
VMware Virtual Ethernet Adapter for VMnet1 00:50:56:C0:00:01
VMware Virtual Ethernet Adapter for VMnet8 00:50:56:C0:00:08[/code:1]
Mais voila il se trouve que dans mon code principal je clique sur un bouton et PAF toutes les infos apparaissent.
Et je n'arrive pas à faire en sorte que lorsque je clique sur mon fameux bouton j'obtienne :
Adresse IP : 192.168.1.5
Adresse MAC : 34:64:A9:31:B7:5C
Passerelle : blabla
DNS : blabla
etc, etc
Sur mon poste j'ai des cartes virtuelles, sur d'autres postes portable il y a le LAN la WIFI, pleins de cartes avec des ID différents et des noms différents.
Auriez-vous donc une solution à me proposer afin d'obtenir l'adresse MAC désirée ?
Je précise que je suis débutant ; je me doute qu'il faille surement faire un if ou un where, mais je ne trouve rien de concluant sur internet.
En vous remerciant !
Message édité par: Icarus, à: 16/06/16 09:56<br><br>Message édité par: Arnaud, à: 17/06/16 11:29
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
Du point de vue de l'OS toutes les cartes retournées existent, donc le retour est normal.
Il te faudrait effectuer un filtre afin d'exclure les cartes réseau virtuelles. La \"difficulté\" réside donc sur le choix de la propriété sur laquelle filtrer...
Pour mettre toutes les chances de notre côté, on peut aussi utiliser la classe Win32_NetworkAdapter afin d'éventuellement filtrer les résultats en amont.
Par exemple :
[code:1]
Get-WmiObject -class Win32_NetworkAdapter | Where-Object {$_.AdapterType -eq 'Ethernet 802.3'}[/code:1]
Si tu es débutant, alors tu ne sais peut-être pas que PowerShell ne te montre pas par défaut toutes les propriétés d'un objet.
Par exemple, pour afficher toutes les propriétés de la carte réseau de ma machine (je n'ai pas de carte virtuelle, donc je n'ai qu'un seul résultat) :
[code:1]
Get-WmiObject -class Win32_NetworkAdapter | where {$_.AdapterType -eq 'Ethernet 802.3'} | Format-List *
Availability : 3
Name : Intel(R) 82566DM-2 Gigabit Network Connection
Status :
StatusInfo :
DeviceID : 7
__GENUS : 2
__CLASS : Win32_NetworkAdapter
__SUPERCLASS : CIM_NetworkAdapter
__DYNASTY : CIM_ManagedSystemElement
__RELPATH : Win32_NetworkAdapter.DeviceID=\"7\"
__PROPERTY_COUNT : 40
__DERIVATION : {CIM_NetworkAdapter, CIM_LogicalDevice, CIM_LogicalElement, CIM_ManagedSystemElement}
__SERVER : Q11-029807
__NAMESPACE : root\cimv2
__PATH : \\Q11-029807\root\cimv2:Win32_NetworkAdapter.DeviceID=\"7\"
AdapterType : Ethernet 802.3
AdapterTypeId : 0
AutoSense :
Caption : [00000007] Intel(R) 82566DM-2 Gigabit Network Connection
ConfigManagerErrorCode : 0
ConfigManagerUserConfig : False
CreationClassName : Win32_NetworkAdapter
Description : Intel(R) 82566DM-2 Gigabit Network Connection
ErrorCleared :
ErrorDescription :
GUID : {745EB0CE-1689-4004-A956-B219B7ECD39A}
Index : 7
InstallDate :
Installed : True
InterfaceIndex : 11
LastErrorCode :
MACAddress : 00:21:70:02:AA:19
Manufacturer : Intel
MaxNumberControlled : 0
MaxSpeed :
NetConnectionID : Connexion au réseau local
NetConnectionStatus : 2
NetEnabled : True
NetworkAddresses :
PermanentAddress :
PhysicalAdapter : True
PNPDeviceID : PCI\VEN_8086&DEV_10BD&SUBSYS_02111028&REV_02\3&172E68DD&7&C8
PowerManagementCapabilities :
PowerManagementSupported : False
ProductName : Intel(R) 82566DM-2 Gigabit Network Connection
ServiceName : e1express
Speed : 100000000
SystemCreationClassName : Win32_ComputerSystem
SystemName : Q11-029807
TimeOfLastReset : 20160613144020.375199+120
Scope : System.Management.ManagementScope
Path : \\Q11-029807\root\cimv2:Win32_NetworkAdapter.DeviceID=\"7\"
Options : System.Management.ObjectGetOptions
ClassPath : \\Q11-029807\root\cimv2:Win32_NetworkAdapter
Properties : {AdapterType, AdapterTypeId, AutoSense, Availability...}
SystemProperties : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers : {dynamic, Locale, provider, UUID}
Site :
Container :
[/code:1]
Du coup, fort de ces informations, on peut se rendre compte qu'il existe la propriété Manufacturer qui peut nous servir pour faire un filtre et ainsi écrire :
[code:1]
PS > Get-WmiObject -class Win32_NetworkAdapter | Where-Object {$_.Manufacturer -eq 'Intel'}
ServiceName : e1express
MACAddress : 00:21:70:02:AA:19
AdapterType : Ethernet 802.3
DeviceID : 7
Name : Intel(R) 82566DM-2 Gigabit Network Connection
NetworkAddresses :
Speed : 100000000
[/code:1]
En espérant que ça t'aide.
Arnaud<br><br>Message édité par: Arnaud, à: 16/06/16 10:52
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Icarus
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 4
- Remerciements reçus 0
Et merci pour ta réponse, ça m'avance déjà pas mal.
Ça réduit le spectre de recherche en éliminant les cartes parasites.
Est-il possible dans la condition \"Where\" d'imposer plusieurs éléments ?
Du genre :
[code:1]Where-Object {$_.Manufacturer -eq 'Intel', 'Realtek', 'Qualcomm'}[/code:1]
Ou n'y aurait-il pas la possibilité en Powershell d'écrire une ligne de code disant :
Donne moi l'adresse MAC dont l'ip commence par 192.168.1 ?
[code:1]$confip = gwmi win32_networkadapterconfiguration | where-Object {$confip.IpAddress -eq '192.168.1'+*}[/code:1]<br><br>Message édité par: Icarus, à: 16/06/16 14:40
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
Est-il possible dans la condition \"Where\" d'imposer plusieurs éléments ?
Du genre :
Where-Object {$_.Manufacturer -eq 'Intel', 'Realtek', 'Qualcomm'}
[code:1]
Get-WmiObject -class Win32_NetworkAdapter | where {$_.Manufacturer -match 'Intel|Realtek|Qualcomm'}
[/code:1]
Match est l'opérateur des expressions régulières.
Sinon tu peux aussi tester l'inverse :
[code:1]
get-wmiobject -class Win32_NetworkAdapter | where {$_.Manufacturer -notmatch 'vmware|virtual'}[/code:1]
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
Ou n'y aurait-il pas la possibilité en Powershell d'écrire une ligne de code disant :
Donne moi l'adresse MAC dont l'ip commence par 192.168.1 ?
$confip = gwmi win32_networkadapterconfiguration | where-Object {$confip.IpAddress -eq '192.168.1'+*}
Si si... :
[code:1]
gwmi win32_networkadapterconfiguration | where {$_.IpAddress -like '192.168.*'}
[/code:1]
Enfin, j'ai vu qu'il existait aussi la propriété PhysicalAdapter. Je pense que ça va t'aider :
[code:1]
Get-Wmiobject -class Win32_NetworkAdapter | where {$_.PhysicalAdapter -eq $true}[/code:1]
ou
[code:1]Get-Wmiobject -class Win32_NetworkAdapter | where {$_.PhysicalAdapter}
[/code:1]
Ca signifie la même chose.
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Icarus
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
- Messages : 4
- Remerciements reçus 0
Je me doutais bien qu'il y en avait d'autres ! J'avais beau essayer dans tout les sens..
Du coup c'est parfait étant donné que dans ma boite tout est en statique.
J'ai tout de même testé le \"PhysicalAdapter\" et ça me retourne également les cartes virtuelles, elles doivent se faire passer pour des physiques les vilaines :/
Dernières questions pour la route, peut-on inclure plusieurs \"where\" en un ?
[code:1]Get-Wmiobject -class Win32_NetworkAdapter | where {$_.IpAddress -like '192.168.1.*'} -and {$_.Manufacturer -match 'Intel|Realtek|Qualcomm'}[/code:1]
Il me manque vraiment certains éléments syntaxiques pour m'améliorer en Powershell
Par exemple lorsque l'on a plusieurs éléments dans une variable, comme mon cas avec plusieurs adresses mac : comment fait-on pour les afficher les unes en dessous des autres ? Car de base elle sont sur une seule ligne les unes après les autres.
J'ai cru comprendre qu'avec un `r on pouvait faire des retour à la ligne, mais je ne trouve pas le bon endroit pour le placer.
[code:1]$Btn_Rec.add_click{
$Inv = Get-Inventaire
$corp.text = \"
Adresse MAC : $($Inv.Mac)\"
}[/code:1]
Je précise que ce bout de code se trouve à l’intérieur d'un événement de bouton faisant appel aux fonctions.
Le résultat donne :
[code:1]Adresse MAC : 34:64:A9:31:B7:5C 0A:00:27:00:00:0E 00:50:56:C0:00:01 00:50:56:C0:00:08[/code:1]
Comment obtenir :
[code:1]Adresse MAC : 34:64:A9:31:B7:5C
0A:00:27:00:00:0E
00:50:56:C0:00:01
00:50:56:C0:00:08[/code:1]
Ayant pas mal codé en php/html et compagnies je suis très \"graphique\" dans mon esprit. Du coup dans mon script powershell j'utilise beaucoup forms ce qui m'oblige à traiter visuellement les informations récoltées.
Ce cas s'applique pour les adresses mac, mais aussi pour les imprimantes installées ou même les lecteurs réseaux par exemple.<br><br>Message édité par: Icarus, à: 16/06/16 16:16
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Tri d'information MAC Address