dhcp_monitor.ps1 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. # Параметры API
  2. $ApiHost = "STAT_IP_OR_HOSTNAME" # Замените на IP/хост API-сервера
  3. $ApiLogin = "LOGIN" # Логин для API
  4. $ApiKey = "API_CUSTOMER_KEY" # API-ключ клиента
  5. # Функция отправки данных на API
  6. function Send-DhcpEventToApi {
  7. param (
  8. [string]$Mac,
  9. [string]$Ip,
  10. [string]$Action,
  11. [string]$Hostname
  12. )
  13. # Формируем URL запроса
  14. $ApiUrl = "http://$ApiHost/api.php?login=$ApiLogin&api_key=$ApiKey&send=dhcp&mac=$Mac&ip=$Ip&action=$Action&hostname=$Hostname"
  15. try {
  16. # Отправляем GET-запрос
  17. $Response = Invoke-RestMethod -Uri $ApiUrl -Method Get -ErrorAction Stop
  18. # Логируем успешную отправку
  19. Write-Host "[$(Get-Date)] DHCP Event Sent: MAC=$Mac, IP=$Ip, Action=$Action, Hostname=$Hostname"
  20. Write-Host "API Response: $($Response | ConvertTo-Json -Compress)"
  21. }
  22. catch {
  23. Write-Host "[ERROR] Failed to send DHCP event: $_" -ForegroundColor Red
  24. }
  25. }
  26. # Основной цикл: мониторим события DHCP
  27. while ($true) {
  28. # Получаем последние события DHCP (ID 10 = "Аренда выдана", ID 11 = "Аренда освобождена")
  29. $Events = Get-WinEvent -LogName "Microsoft-Windows-DHCP-Server/Operational" -MaxEvents 10 -ErrorAction SilentlyContinue |
  30. Where-Object { $_.Id -eq 10 -or $_.Id -eq 11 }
  31. foreach ($Event in $Events) {
  32. # Парсим параметры события
  33. $Ip = $Event.Properties[0].Value
  34. $Mac = $Event.Properties[1].Value
  35. $Hostname = $Event.Properties[2].Value
  36. $Action = if ($Event.Id -eq 10) { "add" } else { "del" }
  37. # Отправляем данные на API
  38. Send-DhcpEventToApi -Mac $Mac -Ip $Ip -Action $Action -Hostname $Hostname
  39. }
  40. # Пауза перед следующей проверкой (5 секунд)
  41. Start-Sleep -Seconds 5
  42. }