两个 powershell 脚本之间的区别

两个 powershell 脚本之间的区别

我收到一个脚本,该脚本应该扫描 4 个 DC 的事件日志,搜索事件 ID 4740(用户锁定)。这是脚本 1。现在我心想,“当我可以扫描运行角色 PDC 模拟器的 DC 的日志时,为什么要扫描所有 DC?”因此我找到了另一个可以完成相同工作但速度更快的脚本...现在我有 4 个问题:

  1. PDCe 是否有自己的日志或者它是“通用”DC 日志?
  2. 这两个脚本是否引用了同一来源?
  3. 为什么第一个需要大约一个小时而第二个需要大约15秒?
  4. 为什么第二个脚本只提供 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将所有事件日志条目传递到您的计算机,然后由您的计算机进行过滤。

以下是几篇更详细的文章。

PDCe 是否有自己的日志或者它是“通用”DC 日志?

不确定您在这里问什么和/或我不知道。

相关内容