在PowerShell中获取networking接口设备名称

我需要一个PowerShell 2脚本来获取每个接口的名称和设备名称,如控制面板中的networking连接所示。

应该很容易…

$interfaces = Get-WmiObject Win32_NetworkAdapter $interfaces | foreach { $friendlyname = $_ | Select-Object -ExpandProperty NetConnectionID $name = $_ | Select-Object -ExpandProperty Name "$friendlyname is $name" } 

但是,$ name会以“Broadcom BCM5709C NetXtreme II GigE(NDIS VBD Client)”的forms出现,而在控制面板中显示为“Broadcom BCM5709C NetXtreme II GigE(NDIS VBD Client) #69 ”。 我无法在属性中的任何位置find该号码。

如何获取名称和设备名称,完全如在Windows Server 2008 R2上的PowerShell 2中的networking连接中所示?

更新:真奇怪的是它显示了其他types网卡的#部分 – 组合卡的接口正确显示。 我的基于NVIDIA的显示在我的桌面系统上。 也许这只是广播卡? 有问题的服务器是戴尔R715,带有4个板载Broadcom NIC和一个4端口Broadcom插卡。

在对更多系统进行testing之后(以及系统上的评论者的testing),它似乎是广播驱动程序的一个“特征”。 更新驱动程序并没有改变任何东西。

除了Get-WmiObject Win32_NetworkAdapter以获取系统中所有networking适配器的名称和设备名称还有哪些方法?

最后find解决办法! 由于它在registry和设备pipe理器中正确显示,我们可以从相关的Win32_PnPEntity对象中获取它。 所以代码变成:

 $interfaces = Get-WmiObject Win32_NetworkAdapter $interfaces | foreach { $friendlyname = $_ | Select-Object -ExpandProperty NetConnectionID $name = $_.GetRelated("Win32_PnPEntity") | Select-Object -ExpandProperty Name "$friendlyname is $name" } 

这与我尝试过的所有系统上的设备pipe理器和networking连接中的名称完全匹配。

我不确定这是否是你的整个代码,但是在你的当前循环中,你只是写了$friendlyname$namevariables。 最后一个项目可能是没有编号的项目。 下面的代码给了我你正在寻找的结果:

 $interfaces = Get-WmiObject Win32_NetworkAdapter $Outputs = @() foreach ($Interface in $Interfaces) { $Output = New-Object -TypeName System.Object $Output | Add-Member -MemberType NoteProperty -Name FriendlyName -Value $Interface.NetConnectionID $Output | Add-Member -MemberType NoteProperty -Name Name -Value $Interface.Name $Outputs += $Output } 

然后你可以使用$outputs | out-grid $outputs | out-grid查看系统上列出的所有内容。

当试图从格兰特的答案时,我得到了一些错误,指出我正试图打印一个空variables。 这是解决方法:

 $interfaces = Get-WmiObject Win32_NetworkAdapter $interfaces | ForEach{ $friendlyname = $_ | ForEach-Object { $_.NetConnectionID } $name = $_.GetRelated("Win32_PnPEntity") | Select-Object -ExpandProperty Name # This tests to ensure friendlyname isn't null if($friendlyname){ "$friendlyname is $name" } }