Небольшой скрипт по импорту клиентов на DHCP-сервер.
По работе потребовалось экспортировать зарезервированных IP-адресов клиентов с одного DHCP-сервера, изменить адресацию и импортировать на другой DHCP-сервер. Клиентов много, поэтому ручками импортировать долго. Я написал небольшой скрипт, который разбирает XML-файл области первого DHCP-сервера и импортирует клиентов в указанную область на втором DHCP-сервере.
Для начала, необходимо экспортировать требуемую область в XML-файл…
- Экспортировать область
192.168.2.0 на первом DHCP-сервере:
1
| Export-DhcpServer -File 'C:\DHCPServer.xml' -ScopeId '192.168.2.0' -Leases
|
Экспортированный файл области выглядит так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| <?xml version="1.0" encoding="utf-8"?>
<DHCPServer xmlns="http://schemas.microsoft.com/windows/DHCPServer">
<IPv4 xmlns="">
<...>
<Scopes>
<Scope>
<Reservations>
<Reservation>
<Name>host1.home.arpa</Name>
<IPAddress>192.168.2.198</IPAddress>
<ClientId>00-00-00-00-00-00</ClientId>
<Type>Dhcp</Type>
<Description>Example host1 description</Description>
</Reservation>
<Reservation>
<Name>host2.home.arpa</Name>
<IPAddress>192.168.2.199</IPAddress>
<ClientId>00-00-00-00-00-00</ClientId>
<Type>Dhcp</Type>
<Description>Example host2 description</Description>
</Reservation>
</Reservations>
</Scope>
</Scopes>
</...>
</IPv4>
</DHCPServer>
|
Редактируем параметры клиентов при помощи какого-нибудь удобного редактора, к примеру, VSCode и сохраняем. Далее, осталось только импортировать отредактированный файл на второй DHCP-сервер при помощи скрипта.
Скрипт
Скрипт разбирает разметку XML-файла и вытаскивает необходимую информацию из следующих тегов:
Name - имя клиента (hostname).IPAddress - IP-адрес клиента.ClientId - MAC-адрес клиента.Type - тип запроса клиента.Description - описание клиента.
Приложение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| <#PSScriptInfo
.VERSION 0.1.0
.GUID ff98447a-f7d7-43a7-80d8-6585ee2eebd9
.AUTHOR Kai Kimera
.AUTHOREMAIL mail@kaikim.ru
.TAGS windows server dhcp
.LICENSEURI https://choosealicense.com/licenses/mit/
.PROJECTURI https://libsys.ru/ru/2026/03/23dd8138-8ca0-51c6-b781-fcf70412bb48/
#>
#Requires -Version 7.4
<#
.SYNOPSIS
Importing clients to the DHCP server.
.DESCRIPTION
Bulk import of clients to DHCP server from XML file.
.EXAMPLE
.\app.dhcp.import.ps1 -Scope '192.168.2.0' -Path 'C:\DHCPServer.xml'
.EXAMPLE
.\app.dhcp.import.ps1 -Scope '192.168.2.0' -Path 'C:\DHCPServer.xml' -Lease
.LINK
https://libsys.ru/ru/2026/03/23dd8138-8ca0-51c6-b781-fcf70412bb48/
#>
# -------------------------------------------------------------------------------------------------------------------- #
# CONFIGURATION
# -------------------------------------------------------------------------------------------------------------------- #
param(
[Parameter(Mandatory)][System.Net.IPAddress]$Scope,
[string]$Path = "${PSScriptRoot}\DHCPServer.xml",
[switch]$Lease
)
$XML = [xml](Get-Content -LiteralPath "${Path}")
$Data = $XML.DHCPServer.IPv4.Scopes.Scope.Reservations.Reservation
# -------------------------------------------------------------------------------------------------------------------- #
# -----------------------------------------------------< SCRIPT >----------------------------------------------------- #
# -------------------------------------------------------------------------------------------------------------------- #
function Import-DHCP {
try {
$Data.ForEach({
$Common = @{
ScopeId = "${Scope}"
IPAddress = "$($_.IPAddress)"
ClientId = "$($_.ClientId)"
Description = "$($_.Description)"
}
if ($Lease) {
$Client = @{
HostName = "$($_.Name)"
ClientType = "$($_.Type)"
}; Add-DhcpServerv4Lease @Common @Client
} else {
$Client = @{
Name = "$($_.Name)"
Type = "$($_.Type)"
}; Add-DhcpServerv4Reservation @Common @Client
}
})
} catch {
Write-Error "ERROR: $($_.Exception.Message)"
}
}
function Start-Script() {
Import-DHCP
}; Start-Script
|
Параметры
Scope - область, в которую необходимо импортировать клиентов.Path - путь к файлу, в котором содержится информация об области DHCP-сервера.Lease - добавить IP-адреса только в список арендованных (не резервирование).
Примеры
- Импортировать IP-адреса клиентов из файла
C:\DHCPServer.xml в область 192.168.2.0 в список зарезервированных:
1
| .\app.dhcp.import.ps1 -Scope '192.168.2.0' -Path 'C:\DHCPServer.xml'
|
- Импортировать IP-адреса клиентов из файла
C:\DHCPServer.xml в область 192.168.2.0 в список арендованных:
1
| .\app.dhcp.import.ps1 -Scope '192.168.2.0' -Path 'C:\DHCPServer.xml' -Lease
|