PowerShell: Импорт клиентов на DHCP-сервер

Небольшой скрипт по импорту клиентов на 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 - описание клиента.

Приложение

app.dhcp.import.ps1
 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