设想
将其简化为最简单的示例:
我有一个具有 DHCP 服务器角色的 Windows 2008 R2 标准 DC。它通过各种 IPv4 范围分发 IP,没有问题。
我想要什么
每当设备获得 DHCP 地址租约并且该设备不是Active Directory 中加入域的计算机时,我想要一种创建通知/事件日志条目/类似的方法。是否是自定义 Powershell 等对我来说并不重要。
底线 =我想要一种方法来知道非域设备何时在网络上而不使用 802.1X。 我知道这不会考虑静态 IP 设备。我确实有可以扫描网络并查找设备的监控软件,但它的细节并不是那么精细。
研究完成/考虑的选项
我看不到内置日志记录的任何此类可能性。
是的,我知道 802.1X 并且有能力在这个位置长期实施它,但我们离这样的项目还有一段时间,虽然这可以解决网络身份验证问题,但这对我在外面仍然有帮助802.1X 目标。
我四处寻找一些可能被证明有用的脚本位等,但我发现的东西让我相信我的 google-fu 目前让我失望了。
我相信下面的逻辑是合理的(假设没有一些现有的解决方案):
- 设备收到 DHCP 地址
- 记录事件日志条目(DHCP 审核日志中的事件 ID 10 应该可以工作(因为我最感兴趣的是新租约,而不是续订):http ://technet.microsoft.com/en-us/library /dd759178.aspx )
- 在这一点上,某种脚本可能必须接管下面剩余的“步骤”。
- 以某种方式查询这些事件 ID 10 的这个 DHCP 日志(我很想推,但我猜拉是这里唯一的办法)
- 解析查询以获取分配新租约的设备名称
- 在 AD 中查询设备名称
- 如果在 AD 中找不到,请发送通知电子邮件
如果有人对如何正确执行此操作有任何想法,我将不胜感激。我不是在寻找“给我代码”,而是想知道是否有上述列表的替代品,或者我是否想清楚并且存在另一种收集此信息的方法。如果您有想要共享的代码片段/PS 命令来帮助完成此任务,那就更好了。
非常感谢 ErikE 和这里的其他人,我已经走上了一条道路……我不会说这是正确的道路,但我想出的 Powershell 脚本可以解决问题。
如果有人想要,代码如下。只需手动运行它指向每个 DHCP 服务器或安排它(再次指向脚本中的每个 DHCP 服务器)。
脚本的作用:
你需要什么:
该脚本使用 AD 模块 (
import-module activedirectory
),因此最好在运行 DHCP 的 AD DC 上运行。如果您不是这种情况,您可以安装 AD powershell 模块:http: //blogs.msdn.com/b/rkramesh/archive/2012/01/17/how-to-add-active-directory-模块在-powershell-in-windows-7.aspx您还需要在此处找到 Quest 的 AD Powershell cmdlet: http ://www.quest.com/powershell/activeroles-server.aspx 。 在运行脚本之前安装这些,否则它将失败。
脚本本身(经过清理,您需要设置一些变量以满足您的需要,例如输入文件名、要连接的域、要连接的 dhcp 服务器、接近尾声的电子邮件设置等):
希望对其他人有所帮助!
好的,我不确定我是否在这里遵守礼仪,但我发布了第二个答案,而不是编辑我以前的答案,因为它确实包含一些可能对某人有用的信息,即使被证明与本案无关。如果这让我在这个论坛上成为白痴,请随时告诉我我的错误方式。
问题分为几个部分,这里有一些我觉得最有趣的建议。如果没有日志中的示例,这是我能做的最好的,所以这只是建议而不是解决方案。
get-content
使用参数解析日志-wait
。对于我的用例,在错误日志中找到错误就足够了。这适用于我自己的用例,请原谅格式:
而不是
$_ -match "ERROR"
您需要以某种方式分隔日志 ID 字段和计算机名称。我不确定现在如何以最好的方式进行,但由于where-object -match
提供正则表达式支持,我想这可能是一个选择。您还可以首先将 $_ 变量存储在另一个新变量中,以便稍后在管道中、嵌套的 foreach 循环等中方便地获取它。假设您可以获取计算机名,我猜
get-adcomputer
cmdlet 将是您查询 AD (import-module activedirectory
) 的最简单方法,并且我猜错误发送邮件?在你的情况下,使用
import-csv
当然会更加优雅,但我不知道有什么方法可以跟踪它(如果有人碰巧读到这篇文章并且知道那条小巷的诡计,请分享)。假设您确定事件 ID,并且在 DHCP 日志中没有其他事件记录到此 ID,但您感兴趣的事件,推送确实是一个选项。
1) 打开服务器管理器,进入事件查看器中的 DHCP 日志。
2) 找到您希望将您的操作附加到的代表条目。选择它并右键单击。
3) 选择“将任务附加到此事件”。
4)任务创建向导打开,把它从那里拿走......
实际上有一个明确的电子邮件选项,但是如果您需要更多的逻辑,您当然可以自由地使用 start-a-program 选项来启动 powershell.exe 并将脚本附加到它。如果您需要指导,有很多关于如何让任务管理器运行 powershell 脚本的优秀 googleable howtos。
我看到的直接替代方法是通过按预定时间间隔使用 powershell 解析事件日志来使用 pull。“Microsoft Scripting Guy”,又名 Ed Wilson,写了一些很棒的博客文章,介绍如何使用不同版本的 powershell 中可用的 cmdlet 解析事件日志,因此我建议以他的博客为起点。
至于实际的 cmdlet,我现在没有时间拿出我的方便片段,但会在一两天后再次查看,如果没有其他人参与其中一些精心挑选的片段,或者你没有不能自己解决所有问题:-)
虽然这不能解决您想要的解决方案,但可以实现您的目标的一个选项是利用
arpwatch
( link ) 在网络上看到新的(以前看不见的)主机时通知您。Windows 的替代品
arpwatch
似乎是不含咖啡因的,但我从未使用过它,所以不能说它的好坏。