Powershell:特定网卡的计数器实例名称

时间:2015-12-03 06:02:07

标签: powershell wmi performancecounter

我可以像这样获得网卡计数器实例名称:

 Get-WmiObject Win32_PerfRawData_Tcpip_NetworkInterface

为Name输出类似的内容:

Intel[R] Ethernet Controller X540-AT2
Intel[R] Ethernet Controller X540-AT2 _2
Intel[R] Ethernet Controller X540-AT2 _3
Intel[R] Ethernet Controller X540-AT2 _4

我可以像这样获得(已启用)网卡:

Get-WmiObject win32_networkadapter -filter "netconnectionstatus=2"

为Name输出类似的东西:

Intel(R) Ethernet Controller X540-AT2
Intel(R) Ethernet Controller X540-AT2 #4

但是,任何一个调用都没有返回与另一个直接匹配的属性。

最接近的是win32_networkadapter的名称,它与计数器名称​​类似,但已被更改为删除非法字符并更改其他字符(* 1),并具有某种实例化继续(* 2)。

(* 1)=只是在测试中,它用圆括号("()")换成方括号(" []"),并为下划线转义哈希值。

(* 2)=在具有四个网络适配器的计算机中

我的问题是:如何直接将一个映射到另一个,而不依赖于我的猜测文本替换?

修改
如果您尝试在VM上测试此功能,则需要添加至少两个网卡。

以下是在Hyper-V上运行的Windows Server 2012 R2 VM的相关输出:

 Get-WmiObject Win32_PerfRawData_Tcpip_NetworkInterface | select Name

 Name
 ----
 Microsoft Hyper-V Network Adapter
 Microsoft Hyper-V Network Adapter _2
 Microsoft Hyper-V Network Adapter _3


 Get-WmiObject win32_networkadapter -filter "netconnectionstatus=2" | select Name

 Name
 ----
 Microsoft Hyper-V Network Adapter #2
 Microsoft Hyper-V Network Adapter
 Microsoft Hyper-V Network Adapter #3

再次修改:

字符串替换已经完成,并且不能在使用NIC绑定的服务器上运行。

以下是使用网卡绑定的服务器示例:

 Get-WmiObject win32_networkadapter -filter "netconnectionstatus=2" | select name

 Name
 ----
 Intel(R) 82575EB Gigabit Network Connection
 Intel(R) 82575EB Gigabit Network Connection
 Intel(R) 82576 Gigabit Dual Port Network Connection
 Intel(R) 82576 Gigabit Dual Port Network Connection
 TEAM : PublicTeam
 TEAM : PrivateTeam


 Get-WmiObject Win32_PerfRawData_Tcpip_NetworkInterface | select Name


 Name
 ----
 TEAM : PrivateTeam - Intel[R] 82575EB Gigabit Network Connection
 TEAM : PublicTeam - Intel[R] 82575EB Gigabit Network Connection _2
 TEAM : PrivateTeam - Intel[R] 82576 Gigabit Dual Port Network Connection
 TEAM : PublicTeam - Intel[R] 82576 Gigabit Dual Port Network Connection _2

*编辑第三个/第四个:*

另一台机器甚至没有使用上述有些可猜测的命名方案。

这是在Windows Server 2012 R2上:

 Get-WmiObject Win32_PerfRawData_Tcpip_NetworkInterface | select Name

 Name
 ----
 Intel[R] 82576 Gigabit Dual Port Network Connection
 Intel[R] 82576 Gigabit Dual Port Network Connection _2
 Intel[R] 82576 Gigabit Dual Port Network Connection _3
 Intel[R] 82576 Gigabit Dual Port Network Connection _4

 Get-WmiObject win32_networkadapter -filter "netconnectionstatus=2" | select Name

 Name
 ----
 Intel(R) 82576 Gigabit Dual Port Network Connection
 Intel(R) 82576 Gigabit Dual Port Network Connection
 Microsoft Network Adapter Multiplexor Driver
 Microsoft Network Adapter Multiplexor Driver #2

请注意,在这种情况下,它是实际拥有IP的Microsoft网络适配器。

虽然在这种情况下,适配器性能计数器上的匹配性能计数器实际上有效(在其他情况下界面似乎更可靠)

编辑5:

人们不断发表评论 "它与其他主题类似:Get Link Speed - Win32_PerfRawData_Tcpip_NetworkInterface"

正如上面编辑中已经解释的那样,我举例说明这种文本捏造并不起作用。

1 个答案:

答案 0 :(得分:0)

我无法找到该名称以外的关系。

因此,我无法想象所有替换字符,我会使用规范名称:

$cananicalName1 = "Intel(R) Ethernet Controller X540-AT2 #4" -replace '[^A-Za-z0-9]','_'
$cananicalName2 = "Intel[R] Ethernet Controller X540-AT2 _4" -replace '[^A-Za-z0-9]','_'

两者都给出了:

Intel_R__Ethernet_Controller_X540_AT2__4