Share via


執行網路工作

此範例僅適用於 Windows 平臺。

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

列出電腦的IP位址

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

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

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

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;}

每個網路適配器的IPAddress屬性實際上是數位。 定義中的大括號表示 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-Object ExcludeProperty 參數來隱藏名稱開頭為 “WINS” 或 “IPX” 的屬性。

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

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

Ping 電腦

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

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

更實用的摘要資訊窗體,顯示 Address、ResponseTime 和 StatusCode 屬性,如下列命令所產生。 的 Autosize 參數 Format-Table 會調整數據表數據行的大小,使其在 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-CimMethod Query 參數會採用 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

使用篩選語句 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 方法,在所有適配卡上執行全域 DHCP 位址發行或更新,ReleaseDHCPLeaseAll以及 RenewDHCPLeaseAll。 不過,命令必須套用至 WMI 類別,而不是特定適配卡,因為全域發行和更新租用是在 類別上執行,而不是在特定配接器上執行。 Cmdlet Invoke-CimMethod 可以呼叫 類別的方法。

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName ReleaseDHCPLeaseAll

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

Invoke-CimMethod -ClassName Win32_NetworkAdapterConfiguration -MethodName RenewDHCPLeaseAll

建立網路共用

若要建立網路共用,請使用 Create Win32_Share 方法

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 類別的 Create 方法檔

拿掉網路共用

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

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

連線 Windows 可存取的網路驅動器機

Cmdlet New-PSDrive 可以建立對應至網路共用的 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 的預設行為。 如需詳細資訊,請參閱下列文章: