Powershell:无法使用 Get-EventLog 获取特定事件 IDS 的输出

Powershell: Can't get Output for specific Event IDS using Get-EventLog

我是 Powershell 的新手。我正在尝试获取有关帐户管理审计的多个事件 IDS 的信息。我知道我写的脚本效率不够高,但我认为这不是问题所在。出于某种原因,我没有得到事件 ID 4781 的输出,即使我已经生成了一些事件并且它们显示在 EventViewer 中。对于 4720,4726,4722 等事件 ID,我可以使用相同的脚本将它们正常记录在输出文件中。有人知道为什么吗?

目前我正在 输出:Action:User 已创建 Time:31-08-2018 2:55 Who:administrator User:test2

$events = Get-Eventlog -LogName Security -ComputerName $DC.Hostname -after $startDate | where {$e.EventID -eq 4781 -or $e.EventID -eq 4720}
$ActivityOutput=foreach ($e in $events) {
if (($e.EventID -eq 4720)){
Write-Output "Action:User Created","Time:$($e.TimeGenerated.ToString("dd-MM-yyyy h:mm"))","Who:$($e.ReplacementStrings[4])","User:$($e.ReplacementStrings[0])"
Write-Output "===============================================`n"
} 
if (($e.EventID -eq 4781)){
Write-Output "The name of an Object changed", "Time:$($e.TimeGenerated.ToString("dd-MM-yyyy  h:mm"))", "Who:$($e.ReplacementStrings[5])","Old Value:$($e.ReplacementStrings[0])","New Value:$($e.ReplacementStrings[1])"
Write-Output "===============================================`n"
}
} Out-File -Append -FilePath C:\UserTracking.txt  -InputObject $ActivityOutput

========= 更新 04/09/2018 因此,似乎 Get-EventLog 只提取了一些 EventID,这就是为什么我缺少其中一些像 4781 的原因。我转换为 Get-WinEvent 并且似乎这个提取了所有需要的 EventID。 编辑代码:

$events=Get-WinEvent -FilterHashtable @{Logname="Security"; StartTime=(get-date).AddDays(-6); ID=4781,4738,4725,4728,4729,4720,4726,4722,4740}
}
  $ActivityOutput=foreach ($e in $events) {
   # user account was created
    if (($e.Id -eq 4720)){
      Write-Output "Action:User Created","Time:$($e.TimeCreated.ToString("dd-MM-yyyy h:mm"))",***"Who:$($e.?)","User:$($e.?)"***
    }

现在,关于如何使用上面显示的 Write-Output 获取信息(例如谁进行了更改以及对哪个用户进行了更改)的任何帮助?

您似乎在 Out-File 之前少了一个 return。不确定这是否是粘贴中的错字。

要验证您是否真的得到任何匹配,只需 运行 $events | ?{$_.EventID -eq 4781}。您会将所有结果打印到屏幕上。如果您发现没有任何日志,则可能是您没有任何 EventID 为 4781 的日志。

一般来说,我不应该使用 "Get-EventLog",而是 "Get-WinEvent"。可以使用 $_.Properties[...][=11 获取每个 eventID 的值=]

因此,最终形成了下面的代码草案,我将对所有需要的 EventID 重复该代码,因为每个 EventID 都需要不同的值

$EventID=4781,4738,4725,4728,4729,4720,4726,4722,4740
$events=Get-WinEvent -FilterHashtable @{Logname="Security"; StartTime=(get-date).AddDays(-6); ID=EventID}
}
  $ActivityOutput=foreach ($e in $events) {
    if (($e.Id -eq 4720)){
      Write-Output "Action:User Created","Time:$($e.TimeCreated.ToString("dd-MM-yyyy h:mm"))","Who:"$e.Properties[4],"User:"$e.Properties[0]
      Write-Output "===============================================`n"
    }