我收到一个脚本,该脚本应该扫描 4 个 DC 的事件日志,搜索事件 ID 4740(用户锁定)。这是脚本 1。现在我心想,“当我可以扫描运行角色 PDC 模拟器的 DC 的日志时,为什么要扫描所有 DC?”因此我找到了另一个可以完成相同工作但速度更快的脚本...现在我有 4 个问题:
- PDCe 是否有自己的日志或者它是“通用”DC 日志?
- 这两个脚本是否引用了同一来源?
- 为什么第一个需要大约一个小时而第二个需要大约15秒?
- 为什么第二个脚本只提供 8 小时前的输出?
第一个脚本:
$DD = get-date -format d
$DD
$L = get-eventlog -logname security -computername dc1, dc2, dc3, dc4 -after $DD | where {$_.eventid -eq 4740 } | ft -autosize timegenerated.replacementstrings
$L
$L >> locked.accounts.txt
第二个脚本:
$PDC = Get-ADDomainController -Discover -Service PrimaryDC
Get-WinEvent -ComputerName $PDC -Logname Security -FilterXPath "*[System[EventID=4740 and TimeCreated[timediff(@SystemTime) <= 604800000]] and
EventData]" |
Select-Object TimeCreated,@{Name='User Name';Expression={$_.Properties[0].Value}},@{Name='Source Host';Expression={$_.Properties[1].Value}}
答案1
这两个脚本是否引用了同一来源?
是的,两者都指安全日志。但您get-eventlog
只从一个 DC 中提取。
- get-eventlog -logname security -computername dc1, dc2, dc3, dc4
- Get-WinEvent -ComputerName $PDC -Logname Security
为什么第二个脚本只提供 8 小时前的输出?
不确定,我猜是时区。使用 ,-after
您可以过滤存储在 中的日期之后的内容$DD
,我相信这会四舍五入到最接近的整天。我相信事件日志数据以 UTC 中的日期+时间存储。无论如何。您将需要使用正确的日期变量来实际指定您想要的时间,包括时区。
$DD = 获取日期 -格式 d $L = 获取事件日志 ... -之后 $DD
为什么第一个需要大约一个小时而第二个需要大约15秒?
部分原因是您查询的是六台计算机,而不是一台。但另一方面,速度Get-WinEvent
明显更快,因为它可以处理远程计算机上的大量过滤,并且只通过网络发送您实际需要的位。它基本上get-eventlog
将所有事件日志条目传递到您的计算机,然后由您的计算机进行过滤。
以下是几篇更详细的文章。
- http://www.mcbsys.com/blog/2011/04/powershell-get-winevent-vs-get-eventlog/
- http://blogs.msdn.com/b/powershell/archive/2009/05/21/processing-event-logs-in-powershell.aspx
- http://blogs.msdn.com/b/powershell/archive/2009/06/11/windows-event-log-in-powershell-part-ii.aspx
PDCe 是否有自己的日志或者它是“通用”DC 日志?
不确定您在这里问什么和/或我不知道。