Доброго времени суток.
1. Если мы
точно знаем как поврежден xml файл – то можно его исправить. Для этого сначала загружаем содержимое файла как текст. Проверяем наличие ошибки, исправляем содержимое, и только потом преобразуем в xml.
$WorkFolder = "c:\WorkFolder"
$LogFile = $WorkFolder + "\" + "sample_0001.log"
$FileContent = (Get-Content $LogFile).Trim()
if (-not ($FileContent -match "</root>$")){$FileContent += "</root>"}
[xml]$XmlFile = $FileContent
2. Обходить файлы в каталоге/каталогах можно с помощью командлета Get-ChildItem. Он позволяет задать отбор файлов по шаблону. Собирать данные csv в одном файле позволяет опция -Append командлета Export-Csv.
$WorkFolder = "c:\WorkFolder"
$ResultFile = "$WorkFolder\result.csv"
Get-ChildItem "$WorkFolder\*.log" | ForEach-Object {
$FileContent = (Get-Content $_).Trim()
if (-not ($FileContent -match "</root>$")){$FileContent += "</root>"}
[xml]$XmlFile = $FileContent
$XmlFile.root.item | Select-Object @(
@{l="date"; e={$_.date}}
@{l="time"; e={$_.time}}
@{l="data1"; e={$_.data1}}
) | Export-Csv -Path $ResultFile -NoTypeInformation -Append -Encoding UTF8
}
Протестировано на Powershell 5.1