Этот ответ на вопрос уборщика помог мне 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> <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