Я пытаюсь отфильтровать события Windows (id = 4633) из журналов событий из заданной файловой структуры рекурсивно с Get-ChildItem
.
Структура файла выглядит следующим образом:
C: \ Temp \raw_data \ 2018-09 \ Securitylog \ Securitylog_2018-09-14_13-30.evtx
Проблема в том, что Get-ChildItem
обрабатывает только первый уровень.Кажется, что каждый уровень ниже первого игнорируется.
Я попытался использовать параметр -Recurse
, но безуспешно.Я не получаю никаких ошибок, поэтому я считаю, что синтаксис правильный.Пример кода приведен ниже.
$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"
Понятия не имею, почему файл не обрабатывается.Файл будет создан, но он пуст, за исключением заголовка.