如何修复Get-ChildItem -Recurse来处理超过第一级的

问题描述 投票:0回答:1

我尝试使用qazxsw poi以递归方式从给定文件结构中的事件日志中过滤Windows事件(id = 4633)。

文件结构如下所示:

C:\ TEMP \ raw_data \ 2018-09 \ Securitylog \ Securitylog_2018-09-14_13-30.evtx

问题是,Get-ChildItem只处理第一级。低于第一个等级的每个等级似乎都被忽略了。

我尝试使用Get-ChildItem参数但没有成功。我没有收到任何错误,所以我认为语法是正确的。代码示例如下。

-Recurse

我不知道,为什么没有处理文件。该文件将被创建,但标题为空execpt。

powershell export-to-csv powershell-v3.0 event-log
1个回答
0
投票

它不一定很难。典型的powershell看起来更像这样。构建一个对象,然后导出到csv。知道你在做什么,并验证每件作品。

$out = New-Object System.Text.StringBuilder
$out.AppendLine("ServerName,EventID,TimeCreated,UserName,File_or_Folder,AccessMask")
$ns = @{e = "http://schemas.microsoft.com/win/2004/08/events/event"}
Get-ChildItem "C:\temp\raw_data" -Recurse | ForEach-Object {
    {
        $evts = Get-WinEvent -FilterHashtable @{Path=$_;id="4663"} -Oldest
        foreach ($evt in $evts) {
            $xml = $evt.ToXml()
            $SubjectUserName = Select-Xml -Xml $xml -Namespace $ns -XPath "//e:Data[@Name='SubjectUserName']/text()" |
                               Select-Object -ExpandProperty Node |
                               Select-Object -ExpandProperty Value
            $ObjectName = Select-Xml -Xml $xml -Namespace $ns -XPath "//e:Data[@Name='ObjectName']/text()" |
                          Select-Object -ExpandProperty Node |
                          Select-Object -ExpandProperty Value
            $AccessMask = Select-Xml -Xml $xml -Namespace $ns -XPath "//e:Data[@Name='AccessMask']/text()" |
                          Select-Object -ExpandProperty Node |
                          Select-Object -ExpandProperty Value
            $out.AppendLine("$($svr),$($evt.id),$($evt.TimeCreated),$SubjectUserName,$ObjectName,$AccessMask")
            Write-Host $svr
            Write-Host $evt.id, $evt.TimeCreated, $SubjectUserName, $ObjectName,$AccessMask
        }
    }
}
$out.ToString() | Out-File -FilePath "C:\Temp\X4663Events.csv"
© www.soinside.com 2019 - 2024. All rights reserved.