因為 TCP/IP 是最常用的網路通訊協定,所以大多數的低階網路通訊協定管理工作都和 TCP/IP 有關。在此節中,我們將使用 Windows PowerShell 和 WMI 來執行下列工作。

列出電腦的 IP 位址

使用下列命令可取得本機電腦目前使用的所有 IP 位址:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Format-Table -Property IPAddress

此命令輸出的值會加上大括號,這與大多數的屬性清單不同:

IPAddress

---------

{192.168.1.80}

{192.168.148.1}

{192.168.171.1}

{0.0.0.0}

為了了解使用大括號的原因,請使用 Get-Member Cmdlet 來檢查 IPAddress 屬性:

PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Get-Member -Name IPAddress

TypeName: System.Management.ManagementObject#root\cimv2\Win32_NetworkAdapter

Configuration

Name MemberType Definition

---- ---------- ----------

IPAddress Property System.String[] IPAddress {get;}

每張網路介面卡的 IPAddress 屬性其實是陣列。定義中的大括號代表 IPAddress 並非 System.String 值,而是 System.String 值的陣列。

列出 IP 設定資料

使用下列命令可顯示每張網路介面卡的 IP 設定詳細資料:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName .

預設顯示的網路介面卡設定物件只佔所有可用資訊的一小部分。如需深入檢查進行疑難排解,請使用 Select-Object 或者格式化 Cmdlet (如 Format-List) 指定所要顯示的屬性。

如果您對 IPX 或 WINS 屬性不感興趣 (在現今的 IP 網路中比較會有這種情況),可以使用 Select-Object 的 ExcludeProperty 參數隱藏名稱以 "WINS" 或 "IPX" 起始的屬性:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE -ComputerName . | Select-Object -Property [a-z]* -ExcludeProperty IPX*,WINS*

此命令將傳回 DHCP、DNS、路由及其他次要 IP 設定屬性的詳細資訊。

Ping 電腦

使用 Win32_PingStatus 可對電腦執行簡單的 Ping 作業。下列命令執行 Ping,但會傳回冗長的輸出:

Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName .

下列命令所產生的摘要資訊格式只會顯示 Address、ResponseTime 和 StatusCode 屬性,較為實用。Format-Table 的 Autosize 參數會調整表格欄的大小,以在 Windows PowerShell 中正確地加以顯示。

PS> Get-WmiObject -Class Win32_PingStatus -Filter "Address='127.0.0.1'" -ComputerName . | Format-Table -Property Address,ResponseTime,StatusCode -Autosize

Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0
A status code of 0 indicates a successful ping.

您可以使用陣列,藉由單一的命令對多部電腦執行 Ping 作業。因為位址的數目多於一個,所以請分別使用 ForEach-Object 對每個位址執行 Ping 作業。

"127.0.0.1","localhost","research.microsoft.com" | ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='" + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

您可以使用相同的命令格式來對子網路上的所有電腦執行 Ping 作業;例如,假設私人網路使用網路編號 192.168.1.0 及標準 Class C 子網路遮罩 (255.255.255.0),則只有從 192.168.1.1 到 192.168.1.254 這個範圍內的位址才是合法的本機位址 (0 永遠保留供網路編號使用,且 255 是子網路廣播位址)。

在 Windows PowerShell 中,您可以利用陳述式 1..254 代表數字 1 到 254 的陣列,如此即可藉由產生陣列並遞增 Ping 陳述式的部分位址值,進而對整個子網路執行 Ping 作業:

1..254| ForEach-Object -Process {Get-WmiObject -Class Win32_PingStatus -Filter ("Address='192.168.1." + $_ + "'") -ComputerName .} | Select-Object -Property Address,ResponseTime,StatusCode

請注意,以此方式產生位址範圍的技巧亦可應用在其他地方。輸入下列命令將產生一組連續位址:

$ips = 1..254 | ForEach-Object -Process {"192.168.1." + $_}

擷取網路介面卡屬性

正如本使用手冊先前所述,使用 Win32_NetworkAdapterConfiguration 可以擷取一般設定屬性。網路介面卡資訊嚴格來講雖不是 TCP/IP 資訊,但諸如 MAC 位址和介面卡類型等資訊均有助於了解電腦上發生的狀況。使用下列命令即可取得這些資訊的摘要:

Get-WmiObject -Class Win32_NetworkAdapter -ComputerName .

為網路介面卡指派 DNS 網域

若要為自動名稱解析指派 DNS 網域,請使用 Win32_NetworkAdapterConfiguration SetDNSDomain 方法。由於每張網路介面卡設定應單獨指派 DNS 網域,您必須使用 ForEach-Object 陳述式為每張介面卡指派網域。

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=true -ComputerName . | ForEach-Object -Process { $_. SetDNSDomain("fabrikam.com") }

篩選陳述式 "IPEnabled=true" 是必要的,因為即便網路僅使用 TCP/IP,電腦上的網路介面卡設定有些並非真正的 TCP/IP 介面卡,而是為所有介面卡提供 RAS、PPTP、QoS 及其他服務支援的一般軟體元素,所以本身並沒有位址。

您可以使用 Where-Object Cmdlet 代替 Get-WmiObject 篩選器來篩選命令。

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName . | Where-Object -FilterScript {$_.IPEnabled} | ForEach-Object -Process {$_.SetDNSDomain("fabrikam.com")}

執行 DHCP 設定工作

修改 DHCP 詳細資料和設定 DNS 一樣也需要處理一組網路介面卡。使用 WMI 可以執行幾種不同的動作,而底下將逐一介紹若干常見的動作。

判斷已啟用 DHCP 的介面卡

使用下列命令可找出電腦上已啟用 DHCP 的介面卡:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName .

如果您要排除 IP 設定有問題的介面卡,則可以只擷取已啟用 IP 的介面卡:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName .

擷取 DHCP 屬性

因為與 DHCP 相關的介面卡屬性通常都是以 "DHCP" 開頭,因此您只要使用 Format-Table 的 Property 參數就能顯示這些屬性:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "DHCPEnabled=true" -ComputerName . | Format-Table -Property DHCP*

為每一張介面卡啟用 DHCP

使用下列命令可在所有介面卡上啟用 DHCP:

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

您可以使用 Filter 陳述式 "IPEnabled=true and DHCPEnabled=false" 排除原已啟用 DHCP 的介面卡,但省略這個步驟並不會造成錯誤。

釋出及更新特定介面卡的 DHCP 租約

Win32_NetworkAdapterConfiguration 類別具有 ReleaseDHCPLeaseRenewDHCPLease 方法。這兩種方法的用法相同。一般而言,當您需要釋出或更新特定子網路上某張介面卡的位址時,才會使用這些方法。要篩選子網路上的介面卡,最簡單的做法是只選擇使用了該子網路閘道的介面卡設定。例如,下列命令將針對向 192.168.1.254 取得 DHCP 租約的本機電腦介面卡釋出其所有的 DHCP 租約:

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

如需更新 DHCP 租約,只要改用 RenewDHCPLease 方法代替 ReleaseDHCPLease 方法即可:

Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled=true and DHCPEnabled=true" -ComputerName . | Where-Object -FilterScript {$_.DHCPServer -contains "192.168.1.254"} | ForEach-Object -Process {$_.ReleaseDHCPLease()}
附註:

如果使用這些方法釋出或更新遠端電腦上特定介面卡的租約後,可能無法再透過該介面卡存取遠端系統。

釋出及更新所有介面卡的 DHCP 租約

您可以使用 Win32_NetworkAdapterConfiguration 的方法 ReleaseDHCPLeaseAllRenewDHCPLeaseAll 全面釋出或更新所有介面卡的 DHCP 位址。但是,命令必須套用於 WMI 類別而非特定介面卡,因為全面釋出或更新租約的對象是類別而非任何介面卡。

若要取得 WMI 類別 (注意並不是類別執行個體) 的參照,您可先列出所有的 WMI 類別,然後依名稱只選取所需的類別。例如,下列命令傳回 Win32_NetworkAdapterConfiguration 類別:

Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"}

接著將整個命令視為類別,並呼叫其 ReleaseDHCPAdapterLease 方法。下列命令將 Get-WmiObjectWhere-Object 管線元素置於括號中,以指示 Windows PowerShell 先評估這些元素:

( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).ReleaseDHCPLeaseAll()

您同樣可以使用上述命令格式呼叫 RenewDHCPLeaseAll 方法:

( Get-WmiObject -List | Where-Object -FilterScript {$_.Name -eq "Win32_NetworkAdapterConfiguration"} ).RenewDHCPLeaseAll()

建立網路共用

使用 Win32_Share Create 方法可建立網路共用:

(Get-WmiObject -List -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Win32_Share"}).Create("C:\temp","TempShare",0,25,"test share of the temp folder")

或者,在 Windows PowerShell 中使用 net share 也能建立共用:

net share tempshare=c:\temp /users:25 /remark:"test share of the temp folder"

移除網路共用

使用 Win32_Share 同樣可移除共用,但做法與建立共用稍有差別,因為您必須擷取所要移除的特定共用而非 Win32_Share 類別。下列陳述式將刪除 "TempShare" 共用:

 (Get-WmiObject -Class Win32_Share -ComputerName . -Filter "Name='TempShare'").Delete()

也可以使用 Net share

PS> net share tempshare /delete
tempshare was deleted successfully.

連接 Windows 可存取的網路磁碟機

New-PSDrive Cmdlet 可用於建立 Windows PowerShell 磁碟機,但此方式建立的磁碟機只有 Windows PowerShell 才能使用。若要建立新網路磁碟機,您可以使用 WScript.Network COM 物件。下列命令將 \\FPS01\users 共用對應到本機磁碟機 B:

(New-Object -ComObject WScript.Network).MapNetworkDrive("B:", "\\FPS01\users")

也可以使用 net use 命令:

net use B: \\FPS01\users

透過 WScript.Network 或 net use 建立對應的磁碟機,可立即供 Windows PowerShell 使用。




目錄