powershell - 如何加快这个 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,837 个。我会面对这个吗?我已将 .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>
解决方案
推荐阅读
- javascript - ajax iframe重新加载后图像不显示
- php - How to batch delete with query builder
- android - How can I show some views in return with time intervals and after the last one, open another activiy?
- date - 谷歌应用脚本不正确的夏令时
- maven - Liquibase Offline:给定数据库 URL 的驱动程序错误
- python - Numpy:如何将颜色 3-dim ndarray 转换为颜色索引?
- reactjs - .NET Core webapp 服务 SPA:被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头
- php - CSRF 令牌不匹配 Laravel ajax 删除数据
- r - 如何在 R 中使用 FIPS 代码(以交互方式?)将县级数据映射为热图
- c# - 创建单独的 API(有界上下文)来存储和检索文件(包括图像)的最佳方法是什么?