问题

问题

对 theCleaner 问题的回答对我有所帮助Windows DHCP 服务器 - 当未加入 AD 的设备获取 IP 地址时收到通知但对他的问题的回答涉及 Quest Poweshell cmdlet。我想使用普通的旧 Powershell v4 cmdlet 来实现解决方案。

问题

我目前根本没有收到任何有关新 DHCP 租约的通知。我希望当有人插入我们这里的一个插孔、从我们的 Windows Server 2012 DHCP 服务器获得 DHCP 租约但尚未加入 AD 时收到通知。因此,我希望收到有关未加入 AD 的设备的新 DHCP 租约的电子邮件通知。

我尝试过的方法

我整理了一些 Powershell 代码,借鉴了上面提到的 theCleaner 的问题中的一些代码。

 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="[email protected]"
$to="[email protected]"
$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)

我收到了“非 AD 加入的 DHCP 客户端”电子邮件,但电子邮件中没有任何对象。我们确实有非 AD 加入的 DHCP 租约(我将一台非 AD 笔记本电脑连接到网络进行测试),但笔记本电脑未显示在电子邮件中。运行脚本后我也没有收到任何红色测试。

如果有人有任何建议,请告诉我。我的脚本中显然存在错误。我个人认为这可能与我的 AD cmdlet 和 CSV 导入有关。

答案1

$NameResult = Get-ADComputer -Filter *

此查询将返回AD 中的所有计算机,其结果永远不会为空;您应该查询您尝试查找的实际计算机名称:

$NameResult = Get-ADComputer $_.Name

此外,DHCP 日志文件中的名称很可能是 FQDN(例如computer.domain.local);如果是这种情况,您需要先删除域后缀,然后再将它们输入到获取 ADcomputer,只需要计算机名称:

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

相关内容