【问题标题】:Enumerate all NICs with IP and MAC addresses in powershell在powershell中枚举所有具有IP和MAC地址的网卡
【发布时间】:2021-11-21 21:09:09
【问题描述】:

如何在 PowerShell 中列出所有具有名称、MAC 和 IP 地址的 NIC?

我知道我可以将 Get-NetIPAddress 和 Get-NetAdapter 结合使用,但有没有一种简单的方法可以做到这一点,因为它似乎是网络管理中最常见的事情之一。

我也发现了 Get-NetIPConfiguration -Detailed,但我不明白为什么 Get-NetIPConfiguration -Detailed | select InterfaceAlias,NetAdapter.LinkLayerAddress,IPv4Address 返回空 MAC 地址。

【问题讨论】:

  • 在选择语句中使用子属性时必须计算子属性,我已经更新了答案。

标签: powershell


【解决方案1】:

WMI 类 Win32_NetworkAdapterConfiguration 包含以下信息:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -computer localhost | Select Description, MACAddress, IPAddress

还有更多:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -computer localhost | Select *

使用NetIPConfiguration -Detailed,在select语句中使用时需要计算子属性LinkLayerAddress:

NetIPConfiguration -Detailed | 
    select InterfaceAlias, 
           IPv4Address, {$_.NetAdapter.LinkLayerAddress}

上述方法可行,但我们可以为计算的属性命名,如下所示:

NetIPConfiguration -Detailed | 
select InterfaceAlias, 
       IPv4Address,
       @{
            name = 'MacAddress'
            expr = {$_.NetAdapter.LinkLayerAddress}
        }

最后,作为一个单行:

NetIPConfiguration -Detailed | select InterfaceAlias, IPv4Address, @{name = 'MacAddress'; expr = {$_.NetAdapter.LinkLayerAddress}}

【讨论】:

  • 谢谢,nimizen!只是帮助我更好地理解它,我认为计算属性用于组合和转换现有的,为什么我不能直接访问子属性?我在哪里可以了解更多信息?
  • 我猜计算属性并不是真正正确的术语;我们正在做的是扩展一个属性,在这种情况下,允许脚本属性返回其结果,我在逻辑上将其视为枚举/计算。我们可以看到NetIPConfiguration -Detailed 实际上是返回多个cmdlet 的属性,包括NetAdapter。运行 NetAdapter | Get-Member 显示 NetAdapter cmdlet 具有 LinkLayerAddress 的别名属性,它是 MacAddress 的 AliasProperty,MacAddress 是 ScriptProperty。
  • 运行NetAdapter| Get-Member MacAddress | select -ExpandProperty Definition 允许我们看到运行脚本以返回该属性。我们可以运行NetIPConfiguration -Detailed | select -ExpandProperty NetAdapter | select InterfaceAlias, LinkLayerAddress, IPv4Address,但随后我们将更改管道并失去对 NetIPConfiguration 的 IPv4 地址属性的访问权限。在表达式中包装 $_.NetAdapter.LinkLayerAddress 可以在不更改管道的情况下对其进行扩展。
  • 什么是“扩展而不改变管道”?
  • 使用我之前评论中的示例,NetIPConfiguration -Detailed | 此时,NetIPConfiguration 沿管道传递。 NetIPConfiguration -Detailed | select -ExpandProperty NetAdapter | 此时我们已将通过管道传递的对象更改为不包含 IPv4Address 属性的 NetAdapter 对象,因此,我们不能再选择它。根据我的回答,通过在表达式中扩展 NetIPConfiguration 对象的 NetAdapter.LinkLayerAddress 属性,通过管道传递的唯一对象是 NetIPCoinfiguration,因此所有属性都可用。
猜你喜欢
  • 2010-10-04
  • 1970-01-01
  • 2013-03-31
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
相关资源
最近更新 更多