6 votes

Obtenir la vitesse du lien - Win32_PerfRawData_Tcpip_NetworkInterface

J'ai trouvé Déterminer la vitesse de connexion du réseau et maintenant j'essaie de corréler les données de Win32_PerfRawData_Tcpip_NetworkInterface avec Win32_NetworkAdapter (ou Win32_NetworkAdapterConfiguration).

Sur la classe Win32_PerfRawData_Tcpip_NetworkInterface je ne vois pas d'index ou de clé unique que je peux utiliser pour référencer Win32_NetworkAdapterConfiguration ou Win32_NetworkAdapter. J'ai essayé d'utiliser le Nom dans Win32_PerfRawData_Tcpip_NetworkInterface et Win32_NetworkAdapter, mais ils semblent toujours différents.

par exemple

Nom : Connexion réseau Intel(R) PRO/1000 PL

contre

Nom : Connexion réseau Intel[R] PRO_1000 PL

Des conseils ?

Merci d'avance,

Milde

\===

Peut-être que ce morceau de code vous aidera à m'aider les gars :)

# J'ai obtenu l'ID de périphérique d'une carte NIC et je l'utilise pour obtenir l'"ID de connexion Net":

$objWMIService = Win32::OLE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") or die "Sortie : échec de la connexion WMI. \n";
$colNicSetts = $objWMIService->ExecQuery(
              "SELECT * FROM Win32_NetworkAdapter Where DeviceID = '$ID'", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);

foreach my $objItem (in $colNicSetts){
    $NetConnID = $objItem->{NetConnectionID};    
}

# => $NetConnID stocke "Connexion réseau Intel(R) PRO/1000 PL".
# Maintenant j'ai essayé d'obtenir la vitesse de connexion avec quelque chose comme ça :

$collItems = $objWMIService->ExecQuery(
             "SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '$NetConnID'", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);
foreach my $objItem (in $collItems){
    $LinkSpeed = $objItem->{CurrentBandwidth};
}
# "Win32_PerfRawData_Tcpip_NetworkInterface" contient "Connexion réseau Intel[R] PRO_1000 PL"
# "Connexion réseau Intel(R) PRO/1000 PL" != Connexion réseau Intel[R] PRO_1000 PL
# => $LinkSpeed vide

4voto

Sinan Ünür Points 76179

OK. Merci d'avoir posté le script court. Pendant que vous travailliez là-dessus, je suivais une piste différente en utilisant DBD::WMI et en fouillant dans la documentation pour voir si vous aviez manqué quelque chose.

Je n'ai pas pu trouver un meilleur moyen (il doit y en avoir un) que de canoniser les noms :

#!/usr/bin/perl

use strict; use warnings;

use DBI;
use Data::Dumper;

my $computer = '.';
($computer) = @ARGV if @ARGV;

my $dbh = DBI->connect("dbi:WMI:$computer", undef, undef,
    { RaiseError => 1},
);

print "=== Depuis Win32_NetworkAdapter ===\n";

my $name = $dbh->selectall_arrayref(
    'SELECT * FROM Win32_NetworkAdapter WHERE DeviceID = 11'
)->[0]->[0]->{Name};

(my $canonname = $name) =~ s/[^A-Za-z0-9]/_/g;

print "Nom: $name\nNom canonique: $canonname\n\n";

my $sth = $dbh->prepare(
    'SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface'
);

$sth->execute;

print "=== Depuis Win32_PerfRawData_Tcpip_NetworkInterface ===\n";

while (defined (my $adapter = $sth->fetchrow_arrayref )) {
    my $conf = $adapter->[0];
    my $perfname = $conf->{Name};
    (my $canonperfname = $perfname) =~ s/[^A-Za-z0-9]/_/g;
    if ( $canonperfname =~ /^$canonname/ ) {
        print "Nom: $perfname\nNom canonique: $canonperfname\n";
        print $conf->{CurrentBandwidth}, "\n\n";
        last;
    }
}

Sortie :

\=== Depuis Win32\_NetworkAdapter ===
Nom: Intel(R) PRO/Wireless 3945ABG Network Connection
Nom canonique: Intel\_R\_\_PRO\_Wireless\_3945ABG\_Network\_Connection

=== Depuis Win32\_PerfRawData\_Tcpip\_NetworkInterface ===
Nom: Intel\[R\] PRO\_Wireless 3945ABG Network Connection - Packet Scheduler Miniport
Nom canonique: Intel\_R\_\_PRO\_Wireless\_3945ABG\_Network\_Connection\_\_\_Packet\_Scheduler\_Miniport
54000000

3voto

Ollie Noakes Points 21

Je viens de regarder ma machine avec les outils WMI, parce que je pensais que ça devait être facile ... ;-)
mais ce n'est pas le cas ...

Mais ce que j'ai trouvé sur ma machine, c'est la concaténation du "Win32_NetworkAdapter.Name" + " __" + "Win32_NetworkAdapter.InterfaceIndex" résulte dans le "Win32_PerfFormattedData_Tcpip_NetworkInterface.Name="NVIDIA nForce Networking Controller _2" [Veillez également à l'espace !].

Exemple de ma machine :

Win32\_NetworkAdapter.DeviceID="13"
Win32\_NetworkAdapter.NetConnectionID="Local Area Connection 2"
Win32\_NetworkAdapter.InterfaceIndex="2"
Win32\_NetworkAdapter.Name="NVIDIA nForce Networking Controller"
Win32\_PerfFormattedData\_Tcpip\_NetworkInterface="NVIDIA nForce Networking Controller \_2"

J'espère avoir bien compris votre question et que cela puisse aider ?!

br--mabra

1voto

Greg Bray Points 3352

La seule approche que j'ai pu trouver était d'utiliser la classe Win32_PnPEntity pour obtenir le DeviceName de l'adaptateur réseau, puis le convertir en InstanceName. Cela vous permet de trouver une valeur clé que vous pouvez utiliser sur d'autres tables WMI (j'ai utilisé InterfaceIndex, mais il y a d'autres choix dans la classe Win32_NetworkAdapter).

Donc, à un niveau élevé:

  1. Obtenez une instance de Win32_NetworkAdapter
  2. Utilisez l'une des deux requêtes WMI WQL ci-dessous pour obtenir le PnpEntity
  3. Convertissez le Win32_PNPEntity.Name en InstanceName en remplaçant :
    1. ( par [
    2. ) par ]
    3. # \ / tout par _
  4. Utilisez cet InstanceName pour interroger la classe Win32_PerfFormattedData_Tcpip_NetworkInterface

C'est assez déroutant, mais comme InstanceName est dérivé du nom de PnPEntity, c'est la seule façon que j'ai trouvée pour obtenir des correspondances précises.

Voici les deux façons dont j'ai pu obtenir l'instance PnPEntity pour un NetworkAdapter :

ASSOCIATORS OF {Win32_NetworkAdapter.DeviceID='12'} WHERE ResultClass=Win32_PnPEntity

SELECT * FROM Win32_PNPEntity where DeviceID='PCI\\VEN_14E4&DEV_1684&SUBSYS_1309103C&REV_10\\4&11050A08&0&00E5'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X