dhcp_sync.ps1 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # Параметры API
  2. $ApiUrl = "http://your-api-server.com/api/dhcp/reservations"
  3. $ApiKey = "ваш_api_ключ"
  4. $DhcpServer = "Ваш_DHCP_Сервер"
  5. # Получаем текущие резервирования DHCP
  6. $CurrentReservations = Get-DhcpServerv4Reservation -ComputerName $DhcpServer |
  7. Select-Object IPAddress, ClientId, Name, Description
  8. # Получаем актуальные резервирования из API
  9. $Headers = @{ "Authorization" = "Bearer $ApiKey" }
  10. $ApiReservations = Invoke-RestMethod -Uri $ApiUrl -Method Get -Headers $Headers
  11. # Конвертируем MAC-адреса в единый формат (убираем разделители)
  12. $ApiReservations | ForEach-Object {
  13. $_.MAC = $_.MAC -replace '[:-]', ''
  14. }
  15. # Удаляем резервирования, которых нет в API
  16. foreach ($Reservation in $CurrentReservations) {
  17. $MacFromDhcp = $Reservation.ClientId -replace '[:-]', ''
  18. $MatchingApiEntry = $ApiReservations | Where-Object { $_.MAC -eq $MacFromDhcp }
  19. if (-not $MatchingApiEntry) {
  20. try {
  21. Remove-DhcpServerv4Reservation -ComputerName $DhcpServer `
  22. -IPAddress $Reservation.IPAddress `
  23. -ErrorAction Stop
  24. Write-Host "Удалено устаревшее резервирование: $($Reservation.IPAddress) ($($Reservation.ClientId))" -ForegroundColor Yellow
  25. } catch {
  26. Write-Host "Ошибка при удалении $($Reservation.IPAddress): $_" -ForegroundColor Red
  27. }
  28. }
  29. }
  30. # Добавляем/обновляем резервирования из API
  31. foreach ($ApiReservation in $ApiReservations) {
  32. try {
  33. # Проверяем, существует ли запись
  34. $ExistingReservation = $CurrentReservations | Where-Object {
  35. ($_.ClientId -replace '[:-]', '') -eq $ApiReservation.MAC
  36. }
  37. if ($ExistingReservation) {
  38. # Обновляем описание (если изменилось)
  39. Set-DhcpServerv4Reservation -ComputerName $DhcpServer `
  40. -IPAddress $ExistingReservation.IPAddress `
  41. -ClientId $ApiReservation.MAC `
  42. -Name $ApiReservation.Hostname `
  43. -Description $ApiReservation.Description `
  44. -ErrorAction Stop
  45. Write-Host "Обновлено резервирование: $($ExistingReservation.IPAddress)"
  46. } else {
  47. # Добавляем новое
  48. Add-DhcpServerv4Reservation -ComputerName $DhcpServer `
  49. -IPAddress $ApiReservation.IP `
  50. -ClientId $ApiReservation.MAC `
  51. -Name $ApiReservation.Hostname `
  52. -Description $ApiReservation.Description `
  53. -ErrorAction Stop
  54. Write-Host "Добавлено новое резервирование: $($ApiReservation.IP)"
  55. }
  56. } catch {
  57. Write-Host "Ошибка при обработке $($ApiReservation.IP): $_" -ForegroundColor Red
  58. }
  59. }