首页 > 解决方案 > 如何加快这个 PowerShell 脚本的速度?

问题描述

我们有一个提供 CIFS 共享的 NetApp NAS。在我们的会计组使用的共享上,某人或某个进程不断移动目录,这会破坏其他进程。我们开启了审计,希望能抓住罪魁祸首。发生这种情况时,我们猜测哪些日志可能涵盖事件发生的时间,然后通过日志查找线索,因为没有“嘿,此文件夹已移动”的事件 ID,因此,我们尝试通过过滤 ID 来缩小范围按身份证。我构建了一个使用 -FilterHashTable 的 PowerShell 脚本,因此我们可以启动脚本并开始做一些更有价值的事情。

$evtid = $args[0]
$folder = $args[1]

Get-ChildItem -include *.evt, *.evtx -Path .\log -Recurse |
ForEach-Object {
"Parsing $($_.fullname)`r`n"
$events = Get-WinEvent -FilterHashtable @{path=$_.fullname;ID=$evtid}
ForEach ($event in $events) {
    $eventXML = [xml]$event.toXML()
    For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i++) {
        Add-Member -InputObject $event -MemberType NoteProperty -Force -Name $eventXML.Event.EventData.Data[$i].name -Value $eventXML.Event.EventData.Data[$i].'#text'
    }
  $events | select * | where ObjectName -Like $folder |Export-CSV ".\Event$($evtid).csv" -Append
  }
}

我对一个 .evtx 文件运行了这个,其中包含 269,465 个事件和一个过滤掉的 ID,在我取消脚本 25 小时后产生 134,83​​7 个。我会面对这个吗?我已将 .evtx 文件导出到 .csv 文件并尝试搜索该文件,但它是一个 225 MB 的文件,我必须获得公司其他人员无法使用的其他工具。

长篇大论,但我想知道的是:您能找到加快此查询的方法吗?

为事件存储的信息

<Event xmlns="http://schemas.netapp.com/events/event">
- <System>
  <Provider Name="NetApp-Security-Auditing" Guid="{3CB2A168-FE19-4A4E-BDAD-DCF422F13473}" /> 
  <EventID>4663</EventID> 
  <EventName>Get Object Attributes</EventName> 
  <Version>101.2</Version> 
  <Source>CIFS</Source> 
  <Level>0</Level> 
  <Opcode>0</Opcode> 
  <Keywords>0x8020000000000000</Keywords> 
  <Result>Audit Success</Result> 
  <TimeCreated SystemTime="2020-03-26T14:34:11.343330000Z" /> 
  <Correlation /> 
  <Channel>Security</Channel> 
  <Computer>NA1-FAS01/svm_nam-pdfs01</Computer> 
  <ComputerUUID>dd646d34-6fc6-11e8-8c96-00a098bd5477/ae301520-91a2-11e8-a174-00a098bd5477</ComputerUUID> 
  <Security /> 
  </System>
- <EventData>
  <Data Name="SubjectIP" IPVersion="4">10.6.21.11</Data> 
  <Data Name="SubjectHostname" Source="" /> 
  <Data Name="SubjectUnix" Uid="0" Gid="1" Local="false" /> 
  <Data Name="SubjectUserSid">S-1-5-21-1139423721-663753744-1511918330-115546</Data> 
  <Data Name="SubjectUserIsLocal">false</Data> 
  <Data Name="SubjectDomainName">AMERICAS</Data> 
  <Data Name="SubjectUserName">AM050240</Data> 
  <Data Name="ObjectServer">Security</Data> 
  <Data Name="ObjectType">Directory</Data> 
  <Data Name="HandleID">00000000000427;00;0000393f;4163de28</Data> 
  <Data Name="ObjectName">(CHIdata);/SOG/NetApp/NetApp Select</Data> 
  <Data Name="InformationRequested">File Type; File Size; Created Time; Last Accessed Time; Last Metadata Modfied Time; Last Modified Time; Allocation size; Delete on last close;</Data> 
  </EventData>
  </Event>

标签: powershell

解决方案


推荐阅读