由于 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 属性不感兴趣(很可能是在使用现代 TCP/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 和标准 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_NetworkAdapterConfigurationReleaseDHCPLeaseAllRenewDHCPLeaseAll 方法,可以对所有适配器执行全局 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 可用。




目录