В системном реестре есть лишь несколько записей, идентифицирующих компьютер в качестве клиента службы DHCP. Это позволяет создать простой сценарий системного реестра, который переведет компьютер на использование службы DHCP при следующем вызове сценария регистрации. Важно обеспечить уникальность диапазона IP-адресов, выдаваемых службой DHCP, по отношению к диапазону статических адресов.

Служба DHCP должна запускаться при загрузке системы. Для этого необходимо в системном реестре перейти к разделу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DHCP и изменить значение записи Start с 1 на 2.

Параметры протокола TCP/IP определяются для каждого сетевого адаптера в отдельном порядке.

Далее приводится пример сценария для системного реестра. Если название службы сетевого адаптера неизвестно, перейдите в системном реестре в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\1 и запишите значение записи ServiceName:

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ñëóæáà ñåòåâîãî àäàïòåðà>\Parameters\Tcpip]
"EnableDHCP"=dword:00000001
"IPInterfaceContext"=dword:00000001
"IPInterfaceContextMax"=dword:00000001

Затем в сценарий регистрации необходимо добавить фрагмент кода, который будет определять наличие на компьютере сетевого адаптера, запускать сценарий .REG и запрашивать IP-адрес. Например:

if reg=elpc575 (for the 3com575tx) goto dhcp
..
..
..
:dhcp
regecit /s NIC_dhcp.reg
ipconfig /renew
net send %computername% Congrats Your computer has been configured for DHCP!
endif

Наиболее быстрым методом получения типа сетевого адаптера является использование локальной сети; при этом будут указаны различные типы сетевых адаптеров. Например, для драйвера Neflx3 могут быть представлены типы 3c89d, netflx3, 3c575tx. При установке службы DHCP в раздел системного реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\CpqNF31 добавляется соответствующий ключ:

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\CpqNF31\Parameters\Tcpip]
"EnableDHCP"=dword:00000000

Необходимо выяснить имя ключа, которое различается для каждого сетевого адаптера. Затем можно запустить программу KIX32.EXE и воспользоваться следующей переменной:

EXISTKEY (
"Key"
}

Таким образом проверяется существование указанного выше ключа в системном реестре.

Параметр Key определяет искомый ключ. Возможны такие результаты запуска программы KIX32.EXE:

· 0 — указанный раздел существует (обратите внимание, что это отличается от модели применения функции EXIST.)

· >0 — раздел не существует, а полученное значение является кодом ошибки:

$ReturnCode=ExistKey (
"HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\CpqNF31" )

If $ReturnCode=0
? "Key exists…"
Endif

Этот код применяется для определения ключа системного реестра и выполнения кода, соответствующего установленному сетевому адаптеру.

Для службы сетевого адаптера можно указать значения записей IPAddress и SubnetMask, которые, тем не менее, будут проигнорированы. Присвойте этим записям значение 0.0.0.0, поскольку незаполненные значения или их удаление не даст желаемого результата. Затем переоткройте службу Рабочая станция (Workstation).

Описанные выше действия также осуществляются с помощью языка сценариев WSH (Windows Scripting Host):

Пример взят из статьи Q197424 службы поддержки MS SupportOnline

‘—————————————–
‘ Следующий сценарий считывает значение системного реестра IPAddress для     
‘ определения разделов реестра, значения которых следует изменить для включения
‘ службы DHCP.
‘ Приведенный код проверяет первые 11 сетевых привязок TCP/IP, чего вполне
‘ достаточно для типового сетевого окружения.
Dim WSHShell, NList, N, IPAddress, IPMask, IPValue, RegLoc
Set WSHShell = WScript.CreateObject(“WScript.Shell”)

NList = array(“0000”, “0001”, “0002”, “0003”, “0004”, “0005”, “0006”, _
“0007”, “0008”, “0009”, “0010”)

On Error Resume Next
RegLoc = “HKLM\System\CurrentControlSet\Services\Class\NetTrans\”

For each N In NList
IPValue = “” ‘Сброс значения переменной
IPAddress = RegLoc & N & “\IPAddress”
IPMask = RegLoc & N & “\IPMask”
IPValue = WSHShell.RegRead(IPAddress)
If (IPValue <> “”) and (IPValue <> “0.0.0.0”) then
WSHShell.RegWrite IPAddress, “0.0.0.0”
WSHShell.RegWrite IPMASK, “0.0.0.0”
end If
Next

WScript.Quit ‘Остановка работы сценария