Назад | Перейти на главную страницу

Как получать по электронной почте уведомление об аренде DHCP, не подключенных к AD?

Этот ответ на вопрос уборщика помог мне Windows DHCP Server - получать уведомление, когда устройство, не подключенное к AD, получает IP-адрес но ответ на его вопрос касался командлетов Quest Poweshell. Я хотел бы найти решение с помощью простых старых командлетов Powershell v4.

Проблема

В настоящее время я вообще не получаю уведомлений о новой аренде DHCP. Я хотел бы получать уведомления, когда кто-то подключается к одному из наших разъемов здесь, получает аренду DHCP от нашего DHCP-сервера Windows Server 2012, но не присоединился к AD. Поэтому мне нужно уведомление по электронной почте о новых арендных договорах DHCP для устройств, не подключенных к AD.

Что я пробовал

Я собрал код Powershell, позаимствовав часть из упомянутого выше вопроса об очистке.

 Get-DhcpServerv4Lease -allleases -ScopeId #myscopeIDhere | Select-Object @{expression= {$_.hostname}; label='name' } | export-CSV -notypeinformation C:\dhcp\LeaseLog.csv

import-module activedirectory

#get input CSV

$leaselogpath = "c:\DHCP\LeaseLog.csv"
Import-csv -path $leaselogpath | 
#query AD for computer name based on csv log
foreach-object `
{ 
   $NameResult = Get-ADComputer -Filter * 
   If ($NameResult -eq $null) {$RogueSystem = $_.name}
   $RogueSystem | Out-File C:\DHCP\RogueClients.txt -Append
   $RogueSystem = $null

}
Get-Content C:\DHCP\RogueClients.txt | Select-Object -Unique | Out-File C:\DHCP\RogueClientsFinal.txt
Remove-Item C:\DHCP\RogueClients.txt

#send email to sysadmin
$smtpserver = #my email server IP address here
$from="abcd@abcdefg.com"
$to="sysadmin@abcdefg.com"
$subject="Non-AD joined DHCP clients"
$body= (Get-Content C:\DHCP\RogueClientsFinal.txt) -join '<BR>&nbsp;<BR>'
$mailer = new-object Net.Mail.SMTPclient($smtpserver)
$msg = new-object Net.Mail.MailMessage($from,$to,$subject,$body)
$msg.IsBodyHTML = $true
$mailer.send($msg)

Я получаю электронное письмо «DHCP-клиенты, не подключенные к AD», но в нем нет объектов. У нас действительно есть аренда DHCP, не подключенная к AD (я подключил ноутбук без AD к сети для тестирования), но ноутбук не отображается в электронном письме. Я не получаю никаких красных тестов после запуска скрипта.

Если у кого-то есть предложения, дайте мне знать. У меня явно что-то не так в моем сценарии. Я лично думаю, что это может быть связано с моими командлетами AD и импортом CSV.

$NameResult = Get-ADComputer -Filter *

Этот запрос вернет все компы в AD, и его результат никогда не будет пустым; вам следует запросить фактическое имя компьютера, которое вы пытаетесь найти:

$NameResult = Get-ADComputer $_.Name

Кроме того, имена в файлах журнала DHCP, скорее всего, будут полными доменными именами (например, computer.domain.local); если это так, вам нужно удалить суффикс домена, прежде чем вводить их в Get-ADcomputer, которому требуется только имя компьютера:

$ComputerName = $_.Name.Replace(".domain.local",$null)
$Result = Get-ADComputer $ComputerName