iT邦幫忙

DAY 25
1

強而有力的 Windows PowerShell系列 第 25

使用 Windows PowerShell 設定網路卡的 DHCP

修改網路卡的設定為 DHCP,同樣也需要透過 Win32_NetworkAdapterConfiguration 類別進行設定。

強而有力的 Windows PowerShell 系列文章列表如下:
http://ithelp.ithome.com.tw/event/ironmanarticle2/id/20005121
先從簡單的下手,用下列的命令可以找出已經啟用 DHCP 的網路卡,並搭配 Format-Table 的 Property 參數屬性來顯示與 DHCP 相關的介面卡屬性:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter DHCPEnabled=true |`
  Format-Table -Property DHCP*

以下面的命令來說,會替已啟用 IP 的每一張網路卡改用 DHCP,所以必須使用 ForEach-Object 為每張網路卡指派啟用 DHCP:

$OK = $True

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true |`
  ForEach-Object -Process {
    $Status = $_.EnableDHCP()
    if ($Status.ReturnValue -gt 0) { $OK = $False }
  }

if ($OK) {
  Write-Host "設定成功!"
}
else {
  Write-Host "設定失敗!"
}

其實原本應該是要這樣寫:

$OK = $True

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=false" |`
  ForEach-Object -Process {
    $Status = $_.EnableDHCP()
    if ($Status.ReturnValue -gt 0) { $OK = $False }
  }

if ($OK) {
  Write-Host "設定成功!"
}
else {
  Write-Host "設定失敗!"
}

也就是說要在 Filter 陳述式中,使用 "IPEnabled=true and DHCPEnabled=false" 來排除原已啟用 DHCP 的介面卡,由於省略這個檢查步驟,並不會造成錯誤,所以就偷懶省掉了。

如果要釋放出,然後再更新某個特定網路卡的 DHCP 租期,可透過 Win32_NetworkAdapterConfiguration 類別的 ReleaseDHCPLeaseRenewDHCPLease 方法。這兩種方法的使用法是一樣的。一般來說,當我們需要釋出或更新特定子網路上某張網路卡的位址時,才會使用這些方法。至於要如何指定子網路上的網路卡,最簡單的做法便是找出使用了該子網路閘道的網路卡設定。例如,下列的命令將從向 192.168.192.254 取得 DHCP 租期的網路卡釋放出其所有的 DHCP 租期:

# 不特別處理執行結果的傳回值,所以在執行時,將會看到相關的屬性
Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" |`
  Where-Object -FilterScript {$_.DHCPServer -contains "192.168.192.254"} |`
  ForEach-Object -Process {$_.ReleaseDHCPLease()}

如果需更新 DHCP 的租期,只要改用 RenewDHCPLease 方法取代上面程式碼中的 ReleaseDHCPLease 方法即可:

# 不特別處理執行結果的傳回值,所以在執行時,將會看到相關的屬性
Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" |`
  Where-Object -FilterScript {$_.DHCPServer -contains "192.168.192.254"} |`
  ForEach-Object -Process {$_.RenewDHCPLease()}

請注意
如果使用這些方法釋出或更新遠端電腦上特定網路卡的租期之後,很可能會無法再透過該網路卡存取遠端系統。此外,不論是要釋出或更新本機或遠端電腦特定網路卡的租期,皆要確認有執行該操作的權限。

Win32_NetworkAdapterConfiguration 類別有提供 ReleaseDHCPLeaseAllRenewDHCPLeaseAll 方法,可以一次釋出或更新所有介面卡的 DHCP 位址。由於全面釋出或更新租期的對象是類別而非任何一張網路卡,因此使用上述的兩個命令必須套用於 WMI 類別而非特定網路卡。那要如何取得 WMI 類別的參照呢?

可以先列出所有的 WMI 類別,然後依名稱只選取所需的 Win32_NetworkAdapterConfiguration 類別。接著將整個命令視為類別,並呼叫其 ReleaseDHCPLeaseAllRenewDHCPLeaseAll 方法。例如,下列的命令會依序進行釋出與更新所有網路卡的 DHCP 租期操作:

# 不特別處理執行結果的傳回值,所以在執行時,將會看到相關的屬性
(Get-WmiObject -List |`
  Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}).ReleaseDHCPLeaseAll()
(Get-WmiObject -List |`
  Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}).RenewDHCPLeaseAll()

上一篇
使用 Windows PowerShell 設定網路卡的固定 IP 位址(下)
下一篇
使用 Windows PowerShell 檢查網路設定是否正確
系列文
強而有力的 Windows PowerShell33

尚未有邦友留言

立即登入留言