修改 DHCP 详细信息需处理一组网络适配器,与 DNS 配置的操作相同。 你可通过使用 WMI 执行多种不同的操作,我们将逐步介绍一些常见操作。

确定启用 DHCP 的适配器

若要查找计算机上启用了 DHCP 的适配器,请使用下面的命令:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true"

若要排除有IP 配置问题的适配器,可以仅检索已启用 IP 的适配器:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true"

检索 DHCP 属性

因为适配器的 DHCP 相关属性通常以“DHCP”开头,所以你可使用 Format-Table 的 Property 参数来仅显示那些属性:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=$true" |
  Format-Table -Property DHCP*

在每个适配器上启用 DHCP

若要在所有适配器上启用 DHCP,请使用下面的命令:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
  ForEach-Object -Process {$_.EnableDHCP()}

可以使用 Filter 语句“IPEnabled=$true and DHCPEnabled=$false”来避免在已启用 DHCP 的适配器上再次启用,但忽略此步骤不会导致出现错误。

释放和续订特定适配器上的 DHCP 租约

Win32_NetworkAdapterConfiguration 类具有 ReleaseDHCPLease 和 RenewDHCPLease 方法。 这两种方法的使用方式相同。 一般情况下,在仅需释放或续订特定子网上的适配器地址时使用这些方法。 在子网上筛选器适配器的最简单方法是仅选择使用该子网的网关的适配器配置。 例如,下面的命令释放本地计算机上适配器上的所有 DHCP 租约,这些适配器正在从 192.168.1.254 获得 DHCP 租约:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true" |
  Where-Object {$_.DHCPServer -contains '192.168.1.254'} |
    ForEach-Object -Process {$_.ReleaseDHCPLease()}

续订 DHCP 租约的唯一更改是使用 RenewDHCPLease 方法,而不是 ReleaseDHCPLease 方法:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=$true and DHCPEnabled=$true" |
  Where-Object {$_.DHCPServer -contains '192.168.1.254'} |
    ForEach-Object -Process {$_.ReleaseDHCPLease()}

注意:在远程计算机上使用这些方法时,请注意,如果你通过已释放或已续订租约的适配器连接到远程系统,则可能会失去对该系统的访问权限。

释放和续订所有适配器上的 DHCP 租约

可以通过使用 Win32_NetworkAdapterConfiguration 方法、ReleaseDHCPLeaseAll 和 RenewDHCPLeaseAll 对所有适配器指定全局 DHCP 地址释放或续订。 但是,该命令必须适用于 WMI 类,而不是特定的适配器,因为全局释放和续订租约是对该类执行的,而不是对特定适配器执行的。
可以通过列出所有 WMI 类,然后按名称仅选择所需类来获取对 WMI 类而不是类实例的引用。 例如,下面的命令将返回 Win32_NetworkAdapterConfiguration 类:

Get-CimInstance -List | Where-Object {$_.Name -eq 'Win32_NetworkAdapterConfiguration'}

可以将整个命令视为类,并在其上调用ReleaseDHCPAdapterLease 方法。 在下面的命令中,Get-CimInstance 和 Where-Object 管道元素两边的括号指示 PowerShell 先对其进行评估:

(Get-CimInstance -List |
  Where-Object {$_.Name -eq 'Win32_NetworkAdapterConfiguration'}).ReleaseDHCPLeaseAll()

可以使用相同的命令格式来调用 RenewDHCPLeaseAll 方法:

(Get-CimInstance -List |
  Where-Object {$_.Name -eq 'Win32_NetworkAdapterConfiguration'}).RenewDHCPLeaseAll()