У меня есть небольшой скрипт PowerShell, который анализирует файлы журналов, чтобы извлечь определенные строки и перенести их в ArrayList.
[regex]$regex = "(?'datetime'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{1,3}[+-]\d{2}:\d{2}).*" #shortened for ease of understanding
$results = New-Object System.Collections.ArrayList
Get-ChildItem 'C:\debug-*.txt' | ForEach-Object {
Get-Content $_ | Where-Object {$_ -match $regex} | ForEach-Object {
$match = $regex.Match($_)
$obj = New-Object psobject
foreach ($group in $match.Groups) {
if ($group.Name -ne "0") {
$obj | Add-Member -NotePropertyName $group.Name -NotePropertyValue $group.Value
}
}
$results.Add($obj)
}
}
В моей разработке P C он работает на одном Windows 2012 Сервер работает, но на другом я получаю сообщение об ошибке, потому что $group.Name
является нулевым. На этой машине никогда не существует свойства Name
в группах Match
.
Похоже, это было добавлено в. NET 1.1, но сервер Windows 2012, который поставляется с PowerShell 3.0 и . NET 4 установлено.