[url]http://www.microsoft.com/china/technet/community/scriptcenter/topics/networking/04_atnc_ipadd.mspx[/url]

管理客户端上的 DHCP

虽然 DHCP 已经是一种自动化方式,但是使用脚本可以帮助您自动配置一组客户端以利用 DHCP。通过 WMI 类 Win32_NetworkAdapterConfiguration 提供的属性和方法,您可以枚举 DHCP 设置,启用或禁用 DHCP,以及续订或中止租约。
表 9 说明了可用于 IP 地址分配的 Win32_NetworkAdapterConfiguration 属性。
表 9    Win32_NetworkAdapterConfiguration IP 地址分配属性
属性类型说明
DefaultIPGateway
字符串数组
计算机系统使用的默认网关的 IP 地址数组。
DHCPEnabled
布尔
如果是 True,DHCP 服务器会在建立网络连接时自动为计算机系统分配一个 IP 地址。
DHCPLeaseExpires
datetime
DHCP 服务器为计算机分配的租用 IP 地址的到期日期和时间。
DHCPLeaseObtained
datetime
DHCP 服务器为计算机分配的 IP 地址获得租约的日期和时间。
DHCPServer
字符串
DHCP 服务器的 IP 地址。
GatewayCostMetric
Uint16
用于计算最快、最可靠或最廉价路由的整数成本跃点数值(从 1 到 9999)数组。这个参数与 DefaultIPGateway 属性之间存在一一对应关系。
IPConnectionMetric
(Windows XP 的新增属性)
Uint32
绑定了 IP 的适配器的已配置路由的使用成本;对于 IP 路由表中的路由来说,这是一个加权值。如果在 IP 路由表中有多个指向目标计算机的路由,将使用跃点数最少的路由。默认值是 1。
IPAddress
字符串
与当前网络适配器相关的所有 IP 地址构成的数组。
IPSubnet
字符串
与当前网络适配器相关的所有子网掩码构成的数组。
上表中的所有属性都是只读的。类型 uint16 和 uint32 是由强类型编程语言使用的无符号整数类型;VBScript 可将它们有效地作为整数进行处理。
表 10 描述了可用于 IP 地址分配的 Win32_NetworkAdapterConfiguration 方法。
表 10    Win32_NetworkAdapterConfiguration IP 地址分配方法
方法参数说明
EnableDHCP
为使用这个网络适配器的服务启用 DHCP。DHCP 允许动态分配 IP 地址。
EnableStatic
IPAddress – 字符串数组
SubnetMask – 字符串数组
为目标网络适配器启用静态 TCP/IP 寻址。这样便会对此网络适配器禁用 DHCP。
ReleaseDHCPLease
释放已绑定到启用了 DHCP 的特定网络适配器的 IP 地址。
警告   如果在本地计算机上启用 DHCP,该选项会对这个特定的网络适配器禁用 TCP/IP。如果您没有访问目标系统的其他路径(即另一个绑定 TCP/IP 的网络适配器),所有 TCP/IP 通信都会中断。
ReleaseDHCPLeaseAll
静态方法。释放已绑定到所有启用了 DHCP 的网络适配器的 IP 地址。
警告   如果在本地计算机上启用 DHCP,此选项将终止所有的 DHCP TCP/IP 连接。
RenewDHCPLease
续订启用了 DHCP 的特定网络适配器上的 IP 地址。DHCP 服务器分配的 IP 地址的租约有一个截止日期;如果客户端打算继续使用分配的 IP 地址,就必须进行续订。
RenewDHCPLeaseAll
静态方法。续订所有启用了 DHCP 的网络适配器的 IP 地址。DHCP 服务器分配的 IP 地址的租约有一个截止日期;如果客户端打算继续使用分配的 IP 地址,就必须进行续订。
SetGateways
DefaultIPGateway – 字符串数组
GatewayCostMetric – unit16
指定一个网关列表,这些网关用于将数据包路由到该网络适配器连接的子网以外的子网。该方法仅在网络适配器处于静态 IP 模式时才有效。
上表中的所有方法都返回一个正整数:
0 表示成功完成。
1 表示成功完成,并需要重新启动。
大于 1 的数字表示出现了某种问题,方法无法完成。WMI SDK 列出了这些方法的返回值的含义。

显示 DHCP 客户端信息

如果您在使用诸如 DHCP 之类的技术,使用脚本的第一步通常是确定与它相关的设置的当前配置。这也是本节及后面各节所用的一个步骤。
Win32_NetworkAdapterConfiguration 提供基于每个适配器的属性,这些属性显示是否启用了 DHCP;显示 DHCP 服务器的 IP 地址;显示租约获得和到期的日期和时间;显示客户端 IP 地址和子网掩码(各网络适配器可以具有一个以上的属性)。
因为 WMI 返回的日期和时间的格式可读性较差,所以在显示租约日期和时间时,需要将 WMI 日期和时间格式转换为对用户更友好的格式。
下面的脚本使用 Win32_NetworkAdapterConfiguration 的以下属性来显示网络客户端的 IP 地址分配设置:DHCPEnabled、DHCPServer、DHCPLeaseObtained、DHCPLeaseExpires、IPAddress 和 IPSubnet。只有在启用了 DHCP 时,此脚本才显示 DHCPServer、DHCPLeaseObtained 和 DHCPLeaseExpires 的设置。
此脚本不是使用 WSH WScript.Echo 方法直接显示设置,而是将设置收集起来并分配给一个字符串,然后再进行显示。接着,在使用 If ...Then 语句验证 DHCPEnabled 为 True 后,此脚本将显示从属设置。
由 Dhcpsettings.vbs、DHCPLeaseObtained 和 DHCPLeaseExpires 显示的设置中有两个是作为 DATETIME 值返回的。如果您显示原始值,它看上去就像下面这种形式:
20021201000230.000000+000
前四个数字代表年,随后的两个数字代表月,再后面的两个数字代表日,然后是小时、分、秒。您可以判断出它的含义,不过,得花点时间。
Windows XP 和 Windows Server 2003 向 WMI 脚本 API 中添加了一个新的 SWbemDateTime 对象。如果所有客户端运行的都是 Windows XP 和 Windows Server 2003,则可以使用该对象来更轻松地分析和转换 datetime 值。
但是,如果并非所有的网络主机都运行 Windows XP 或 Windows Server 2003,则可以采用一种更方便、更简单的解决方案:即使用 VBScript 的字符串处理功能,将 datetime 值分析成一种易读的格式。
在此脚本中,为了将 datetime 值转换为可读性较高的格式,Dhcpsettings 调用了函数 WMIDateToString(),并将 datetime 值作为参数传递给该函数。该函数使用 VBScript 内置的 Mid() 和 Left() 字符串函数来转换值。然后,它调用 VBScript CDate() 函数将变量值(所有 VBScript 变量的类型)强制转换为“Date”子类型,并将转换后的日期返回给脚本的主体。
有关 WMI DATETIME 格式的更多信息,请参见下文中的“使用 WMI 在一台计算机上设置时间”。