共用方式為


執行網路工作

此範例僅適用於 Windows 平臺。

由於 TCP/IP 是最常用的網路通訊協定,因此大多數低階網路協定管理工作涉及 TCP/IP。 在本節中,我們使用 PowerShell 和 WMI 來執行這些工作。

列出電腦的IP位址

若要取得本機電腦上使用的所有IP位址,請使用下列命令:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExpandProperty IPAddress

由於 Win32_NetworkAdapterConfiguration 物件的 IPAddress 屬性是陣列,因此您必須使用 Select-ObjectExpandProperty 參數來查看整個位址清單。

10.0.0.1
fe80::60ea:29a7:a233:7cb7
2601:600:a27f:a470:f532:6451:5630:ec8b
2601:600:a27f:a470:e167:477d:6c5c:342d
2601:600:a27f:a470:b021:7f0d:eab9:6299
2601:600:a27f:a470:a40e:ebce:1a8c:a2f3
2601:600:a27f:a470:613c:12a2:e0e0:bd89
2601:600:a27f:a470:444f:17ec:b463:7edd
2601:600:a27f:a470:10fd:7063:28e9:c9f3
2601:600:a27f:a470:60ea:29a7:a233:7cb7
2601:600:a27f:a470::2ec1

使用 Get-Member Cmdlet,您可以看到 IPAddress 屬性是陣列:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Get-Member -Name IPAddress
   TypeName: Microsoft.Management.Infrastructure.CimInstance#root/cimv2/Win32_NetworkAdapterConfiguration

Name      MemberType Definition
----      ---------- ----------
IPAddress Property   string[] IPAddress {get;}

每個網路適配器的 IP 位址屬性實際上是一個陣列。 定義中的大括弧表示 IPAddress 不是 System.String 值,而是 System.String 值的陣列。

列出IP組態數據

若要顯示每個網路介面器的詳細IP組態資料,請使用下列命令:

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true

網路適配器組態對象的預設顯示是一組非常減少的可用資訊。 如需深入檢查和疑難解答,請使用 Select-Object 或格式化 Cmdlet,例如 Format-List,指定要顯示的屬性。

在新式 TCP/IP 網路中,您可能對 IPX 或 WINS 屬性不感興趣。 您可以使用 Select-ObjectExcludeProperty 參數來隱藏名稱開頭為 “WINS” 或 “IPX” 的屬性。

Get-CimInstance -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=$true |
    Select-Object -ExcludeProperty IPX*,WINS*

此命令會傳回 DHCP、DNS、路由和其他次要IP組態屬性的詳細資訊。

檢測電腦的網路連線狀態

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

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'"

來自 Win32_PingStatus 的回應包含29個屬性。 您可以使用 Format-Table 來選取最感興趣的屬性。 Format-TableAutoSize 參數會調整數據表數據行的大小,使其在 PowerShell 中正確顯示。

Get-CimInstance -Class Win32_PingStatus -Filter "Address='127.0.0.1'" |
    Format-Table -Property Address,ResponseTime,StatusCode -AutoSize
Address   ResponseTime StatusCode
-------   ------------ ----------
127.0.0.1            0          0

StatusCode 為 0 表示偵測成功。

您可以使用陣列來以單一命令 ping 多部電腦。 因為有多個位址,請使用 ForEach-Object 個別 ping 每個位址:

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

您可以使用相同的命令格式來 Ping 子網上的所有位址,例如使用網路號碼 192.168.1.0 和標準類別 C 子網掩碼的專用網(255.255.255.255.0)。 只有 192.168.1.1 到 192.168.1.254 範圍內的位址是合法的本機位址(0 一律保留給網路號碼,255 是子網廣播位址)。

若要在 PowerShell 中表示 1 到 254 的數字陣列,請使用運算式 1..254。 將範圍中的每個值新增至 ping 語句中的部分位址,即可執行完整的子網 Ping:

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

請注意,產生一系列地址的技術也可以用於其他地方。 您可以透過下列方式產生一組完整的位址:

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

擷取網路適配器屬性

稍早,我們提到您可以使用 Win32_NetworkAdapterConfiguration 類別來擷取一般組態屬性。 雖然不是嚴格的 TCP/IP 資訊,但 MAC 位址和適配卡類型之類的網路適配器資訊對於瞭解計算機發生什麼狀況很有用。 若要取得這項資訊的摘要,請使用下列命令:

Get-CimInstance -Class Win32_NetworkAdapter -ComputerName .

指派網路適配器的 DNS 網域

若要指派 DNS 網域以進行自動名稱解析,請使用 Win32_NetworkAdapterConfigurationSetDNSDomain 方法。 Invoke-CimMethodQuery 參數會採用 WQL 查詢字串。 Cmdlet 會呼叫查詢所傳回之每個實例上指定的 方法。

$wql = 'SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=True'
$args = @{ DnsDomain = 'fabrikam.com'}
Invoke-CimMethod -MethodName SetDNSDomain -Arguments $args -Query $wql

需要篩選 IPEnabled=True,因為即使在只使用 TCP/IP 的網路上,計算機上的數個網路適配器組態並不是真正的 TCP/IP 適配卡。 它們是所有適配卡支援 RAS、VPN、QoS 和其他服務的一般軟體元素,因此沒有自己的位址。

執行 DHCP 設定工作

修改 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  "IPEnabled=$true and DHCPEnabled=$true" |
  Format-Table -Property DHCP*

在每個配接器上啟用 DHCP

若要在所有配接器上啟用 DHCP,請使用下列命令:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE IPEnabled=True and DHCPEnabled=False'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

使用 filter 語句 IPEnabled=True and DHCPEnabled=False 可避免在已啟用 DHCP 的位置啟用 DHCP。

在特定適配卡上釋放和更新 DHCP 租用

Win32_NetworkAdapterConfiguration 類別的實例具有 ReleaseDHCPLeaseRenewDHCPLease 方法。 兩者都以相同的方式使用。 一般而言,如果您只需要釋放或更新特定子網上適配卡的位址,請使用這些方法。 篩選子網上配接器最簡單的方式,就是只選擇使用該子網閘道的適配卡組態。 例如,下列命令會在從 192.168.1.254 取得 DHCP 租用的本機電腦上的適配卡上釋放所有 DHCP 租用:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName ReleaseDHCPLease -Query $wql

更新 DHCP 租用的唯一變更是使用 RenewDHCPLease 方法,而不是使用 ReleaseDHCPLease 方法:

$wql = 'SELECT * from Win32_NetworkAdapterConfiguration WHERE DHCPServer="192.168.1.1"'
Invoke-CimMethod -MethodName RenewDHCPLease -Query $wql

備註

在遠端電腦上使用這些方法時,請注意,如果您透過已發行或更新租用的適配卡連線到遠端系統,可能會失去遠端系統的存取權。

在所有配接器上釋放並更新 DHCP 租約

您可以使用 Win32_NetworkAdapterConfiguration 方法、ReleaseDHCPLeaseAllRenewDHCPLeaseAll,在所有適配卡上執行全域 DHCP 位址發行或更新。 不過,命令必須套用至 WMI 類別,而不是特定配接器,因為全域釋放和更新租約是在類別上執行,而不是在特定配接器上執行。 Invoke-CimMethod Cmdlet 可以呼叫 類別的方法。

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

您可以使用相同的命令格式來叫用 RenewDHCPLeaseAll 方法:

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

建立網路共享

若要建立網路共用,請使用 Win32_ShareCreate 方法:

Invoke-CimMethod -ClassName Win32_Share -MethodName Create -Arguments @{
    Path = 'C:\temp'
    Name = 'TempShare'
    Type = [uint32]0 #Disk Drive
    MaximumAllowed = [uint32]25
    Description = 'test share of the temp folder'
}

這相當於 Windows 上的下列 net share 命令:

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

若要呼叫採用參數的 WMI 類別方法,您必須知道有哪些參數可供使用,以及這些參數的類型。 例如,您可以使用下列命令列出 Win32_Class 的方法:

(Get-CimClass -ClassName Win32_Share).CimClassMethods
Name          ReturnType Parameters                                   Qualifiers
----          ---------- ----------                                   ----------
Create            UInt32 {Access, Description, MaximumAllowed, Name…} {Constructor, Implemented, MappingStrings, Stati…
SetShareInfo      UInt32 {Access, Description, MaximumAllowed}        {Implemented, MappingStrings}
GetAccessMask     UInt32 {}                                           {Implemented, MappingStrings}
Delete            UInt32 {}                                           {Destructor, Implemented, MappingStrings}

使用下列命令來列出 Create 方法的參數。

(Get-CimClass -ClassName Win32_Share).CimClassMethods['Create'].Parameters
Name            CimType Qualifiers                                  ReferenceClassName
----            ------- ----------                                  ------------------
Access         Instance {EmbeddedInstance, ID, In, MappingStrings…}
Description      String {ID, In, MappingStrings, Optional}
MaximumAllowed   UInt32 {ID, In, MappingStrings, Optional}
Name             String {ID, In, MappingStrings}
Password         String {ID, In, MappingStrings, Optional}
Path             String {ID, In, MappingStrings}
Type             UInt32 {ID, In, MappingStrings}

您也可以閱讀 Win32_Share 類別的 建立 方法的文件。

移除網路共享

您可以使用 Win32_Share移除網路共用,但此程式與建立共用稍有不同,因為您需要擷取要移除的特定實例,而不是 Win32_Share 類別。 下列範例會刪除 share TempShare

$wql = 'SELECT * from Win32_Share WHERE Name="TempShare"'
Invoke-CimMethod -MethodName Delete -Query $wql

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

New-PSDrive Cmdlet 可以建立對應至網路共用的 PowerShell 磁碟驅動器。

New-PSDrive -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

不過,以這種方式建立的驅動器僅限於在其建立的 PowerShell 會話中使用。 若要將 PowerShell 外部可用的磁碟驅動器對應至其他 PowerShell 會話,您必須使用 Persist 參數。

New-PSDrive -Persist -Name "X" -PSProvider "FileSystem" -Root "\\Server01\Public"

備註

在以提權模式運行時,持續映射的磁碟磁碟機可能無法使用。 這是 Windows UAC 的預設行為。 如需詳細資訊,請參閱下列文章: