获取链接速度 - Win32_PerfRawData_Tcpip_NetworkInterface [英] Get Link Speed - Win32_PerfRawData_Tcpip_NetworkInterface
问题描述
我发现确定网络连接链接速度现在我试图将来自 Win32_PerfRawData_Tcpip_NetworkInterface 的数据与Win32_NetworkAdapter(或 Win32_NetworkAdapterConfiguration).
在 Win32_PerfRawData_Tcpip_NetworkInterface
类上,我没有看到任何我可以用来引用的索引或唯一键Win32_NetworkAdapterConfiguration
或 Win32_NetworkAdapter.我尝试使用
Namein
Win32_PerfRawData_Tcpip_NetworkInterface和
Win32_NetworkAdapter`,但它们看起来仍然不同.
例如
<块引用>名称:英特尔(R) PRO/1000 PL 网络连接
对比
<块引用>名称:Intel[R] PRO_1000 PL 网络连接
有什么提示吗?
先谢谢你,
温和
===
也许那段代码会帮助你帮助我:)
# 我得到了一个 NIC 的 DeviceID 并用它来得到NetConnection ID":$objWMIService = Win32::OLE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") 否则就死掉退出:WMI 连接失败.\n";$colNicSetts = $objWMIService->ExecQuery("SELECT * FROM Win32_NetworkAdapter Where DeviceID = '$ID'", "WQL", wbemFlagReturnImmediately |wbemFlagForwardOnly);foreach 我的 $objItem(在 $colNicSetts 中){$NetConnID = $objItem->{NetConnectionID};}# =>$NetConnID 存储Intel(R) PRO/1000 PL 网络连接".# 现在我尝试通过 sth 获取链接速度.像那样:$collItems = $objWMIService->ExecQuery("SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface Where Name = '$NetConnID'", "WQL", wbemFlagReturnImmediately |wbemFlagForwardOnly);foreach 我的 $objItem(在 $collItems 中){$LinkSpeed = $objItem->{CurrentBandwidth};}# Win32_PerfRawData_Tcpip_NetworkInterface"包含Intel[R] PRO_1000 PL Network"连接# "Intel(R) PRO/1000 PL 网络连接" != Intel[R] PRO_1000 PL 网络连接# =>$LinkSpeed 为空
好的.感谢您发布简短的脚本.当你在做这件事时,我正在使用 DBD::WMI 并仔细阅读文档,看看您是否遗漏了任何内容.
我找不到比规范化名称更好的方法(必须有一个):
#!/usr/bin/perl使用严格;使用警告;使用 DBI;使用数据::倾销者;我的 $computer = '.';($computer) = @ARGV 如果@ARGV;我的 $dbh = DBI->connect("dbi:WMI:$computer", undef, undef,{ RaiseError =>1},);打印=== 来自 Win32_NetworkAdapter ===\n";我的 $name = $dbh->selectall_arrayref('SELECT * FROM Win32_NetworkAdapter WHERE DeviceID = 11')->[0]->[0]->{名称};(我的 $canonname = $name) =~ s/[^A-Za-z0-9]/_/g;打印 "名称: $name\n规范名称: $canonname\n\n";我的 $sth = $dbh->prepare('SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface');$sth->执行;打印=== 来自 Win32_PerfRawData_Tcpip_NetworkInterface ===\n";而(定义(我的 $adapter = $sth->fetchrow_arrayref )){我的 $conf = $adapter->[0];我的 $perfname = $conf->{Name};(我的 $canonperfname = $perfname) =~ s/[^A-Za-z0-9]/_/g;if ( $canonperfname =~/^$canonname/) {打印名称:$perfname\n规范名称:$canonperfname\n";打印 $conf->{CurrentBandwidth}, "\n\n";最后的;}}
输出:
<前>=== 来自 Win32_NetworkAdapter ===名称: Intel(R) PRO/无线 3945ABG 网络连接规范名称:Intel_R__PRO_Wireless_3945ABG_Network_Connection=== 来自 Win32_PerfRawData_Tcpip_NetworkInterface ===名称:Intel[R] PRO_Wireless 3945ABG 网络连接 - 数据包调度程序微型端口规范名称:Intel_R__PRO_Wireless_3945ABG_Network_Connection___Packet_Scheduler_Miniport54000000I found Determining the network connection link speed and now I am trying to correlate the data from Win32_PerfRawData_Tcpip_NetworkInterface with Win32_NetworkAdapter (or Win32_NetworkAdapterConfiguration).
On the class Win32_PerfRawData_Tcpip_NetworkInterface
I don't see any
index or unique key that I can use to reference
Win32_NetworkAdapterConfiguration
or Win32_NetworkAdapter.
I tried to use the
Namein
Win32_PerfRawData_Tcpip_NetworkInterface
and
Win32_NetworkAdapter`, but still they look different.
e.g.
Name: Intel(R) PRO/1000 PL Network Connection
vs
Name: Intel[R] PRO_1000 PL Network Connection
Any hints?
Thank you in advance,
Milde
===
Maybe that piece of code will help you to help me guys :)
# I got the DeviceID of a NIC and use it to get the "NetConnection ID":
$objWMIService = Win32::OLE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") or die "Exit: WMI connection failed. \n";
$colNicSetts = $objWMIService->ExecQuery(
"SELECT * FROM Win32_NetworkAdapter Where DeviceID = '$ID'", "WQL", wbemFlagReturnImmediately | wbemFlagForwardOnly);
foreach my $objItem (in $colNicSetts){
$NetConnID = $objItem->{NetConnectionID};
}
# => $NetConnID stores "Intel(R) PRO/1000 PL Network Connection".
# Now I tried to get the Link Speed with sth. like that:
$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" contains "Intel[R] PRO_1000 PL Network" Connection
# "Intel(R) PRO/1000 PL Network Connection" != Intel[R] PRO_1000 PL Network Connection
# => $LinkSpeed empty
OK. Thanks for posting the short script. While you were working on that, I was following a different track using DBD::WMI and digging through the docs to see if you had missed anything.
I could not find a better way (there must be one) than canonicalizing the names:
#!/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 "=== From 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 "Name: $name\nCanonical name: $canonname\n\n";
my $sth = $dbh->prepare(
'SELECT * FROM Win32_PerfRawData_Tcpip_NetworkInterface'
);
$sth->execute;
print "=== From 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 "Name: $perfname\nCanonical name: $canonperfname\n";
print $conf->{CurrentBandwidth}, "\n\n";
last;
}
}
Output:
=== From Win32_NetworkAdapter === Name: Intel(R) PRO/Wireless 3945ABG Network Connection Canonical name: Intel_R__PRO_Wireless_3945ABG_Network_Connection === From Win32_PerfRawData_Tcpip_NetworkInterface === Name: Intel[R] PRO_Wireless 3945ABG Network Connection - Packet Scheduler Miniport Canonical name: Intel_R__PRO_Wireless_3945ABG_Network_Connection___Packet_Scheduler_Miniport 54000000
这篇关于获取链接速度 - Win32_PerfRawData_Tcpip_NetworkInterface的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!