【问题标题】:Set Static IP Address on all Physical (Wired) Adapters在所有物理(有线)适配器上设置静态 IP 地址
【发布时间】:2019-05-28 04:48:36
【问题描述】:

使用 PowerShell,我们可以轻松地在已知 InterfaceIndex 的适配器上设置静态 IP 地址,如下所示:

New-NetIPAddress -InterfaceIndex 17 -IPAddress 192.168.0.1 -PrefixLength 24 -DefaultGateway 192.168.0.254

我们希望能够在任何物理有线适配器上设置静态IP地址。我们可以像这样得到物理适配器:

Get-NetAdapter –Physical

这将返回如下内容:

名称 接口描述 ifIndex 状态 MacAddress LinkSpeed ---- -------- ------- ------ ---------- --- ------ 以太网 Intel(R) 以太网连接 (5) 17 断开连接 00-11-22-33-44-55 1 Gbps Wi-Fi Intel(R) 无线 LAN 7 断开连接 00-11-22-33-44-56 72 Mbps
  1. 有什么方法可以只获取有线适配器而不获取无线适配器 适配器,而不是名称(可以是任何名称)?
  2. 由于可能有多个有线适配器(但很少见),并且 因为我们不知道可能使用哪个物理适配器,所以我们会 喜欢为每个有线适配器设置静态 IP 地址。什么可以 我们做(类似于“for/each”循环)来设置 IP 地址 PC 上的每个有线适配器?

编辑:在reading some more 中,似乎从 Windows 8 开始,有线适配器可能配置为静态命名为“以太网”。由于我们只针对 Windows 10,我们真的可以只添加一个查询以仅获取名称类似于“Ethernet%”的适配器吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我会用

    Get-NetAdapter -Physical | Where-Object { $_.PhysicalMediaType -eq "802.3" }
    

    这似乎是仅物理以太网适配器的一个很好的指标,它将获得描述/显示名称中没有“以太网”的适配器。 WLAN 设备将具有本机 802.11(或以其他方式表示无线适配器)。

    执行Get-NetAdapter | Export-CSV C:\Path\To\CSV 以获取系统上所有适配器的所有属性。您可能会发现更多属性可用于过滤。

    至于在所有以太网适配器上设置 IP 地址,这应该可以正常工作(尽管我警告在多个适配器上设置相同的 IP 地址可能会在多个以太网适配器同时使用但不太可能发生的情况下引起麻烦):

    $ethernetAdapters = @(Get-NetAdapter -Physical | Where-Object {$_.PhysicalMediaType -eq "802.3"})
    $staticIPAddress = "0.0.0.0"
    $gateway = "0.0.0.0"
    $prefixLength = "24"
    
    foreach ($adapter in $ethernetAdapters) {
        New-NetIPAddress -IPAddress $staticIPAddress -AddressFamily IPV4 -DefaultGateway $gateway -PrefixLength $prefixLength -InterfaceIndex $adapter.InterfaceIndex
    }
    

    请记住将变量替换为您的环境信息,特别是您将用于适配器的 IP 地址。

    您可能希望找到一种方法为每个$adapter 生成一个新的 IP 地址,可能是连续的(*.200、*.201 等),其中一部分调用带有 IP 地址的集中文件, mac 地址和序列号用于记录保存。

    【讨论】:

    • 我的蓝牙适配器的物理媒体类型为 802.3。
    • 我检查了一些可用的机器,我发现大部分是PhysicalMediaType = "BlueTooth",很少出现“未指定”。蓝牙是在 802.15 而不是 802.3 下批准的,所以我觉得这个结果很奇怪。出于好奇,你有什么型号的 BT 适配器?
    • 抱歉回复晚了。这似乎确实起到了作用。谢谢。
    【解决方案2】:

    你有没有尝试过类似的东西

    Get-NetAdapter -Physical | Where-Object { $_.Name -match "^Ethernet" }
    

    【讨论】:

      猜你喜欢
      • 2022-03-03
      • 1970-01-01
      • 2012-03-11
      • 2022-11-22
      • 2014-10-21
      • 1970-01-01
      • 2013-05-20
      • 2018-03-19
      • 2016-11-03
      相关资源
      最近更新 更多