Я запускаю ниже на файловом сервере 2008 R2 для извлечения информации о квотах, поскольку модуль PS FSRM недоступен. При сопоставлении строк в переменной $RegEx
она работает нормально, пока в переменной всего 2 строки, а значения $matches[1]
и $matches[2]
добавляются как ожидалось в массив объектов, но когда я пытаюсь добавить третий захват или в этот случай 5 захватывает, я вообще ничего не получаю. Ничего в городе $matches
и ничего не найдено в $objArr
.Соответствие и захват нескольких операторов RegEx
$RegEx = 'Quota Path:\s+(.*)[\s\S]*?' +
'Source Template:\s+(.*)\s+' +
'Limit:\s+(.*)\s+' +
'Used:\s+(.*)\s+' +
'Available:\s+(.*)'
$objArr = @()
$objArr = (dirquota qu l | Out-String) -replace '\r\n', "`n" -split '\n\n' |
where {$_ -match $RegEx} |
foreach {
New-Object -TypeName psobject -Property ([ordered]@{
QuotaPath = $matches[1]
Template = $matches[2]
QuotaLimit = $matches[3]
Used = $matches[4]
Availble = $matches[5]
})
}
То, что я не понимаю, я могу переставить снимки и любую комбинацию из 2 будет работать, так что кажется, что строки захвата правильно до некоторой степени, но как только я пытаюсь добавить 3-ий или больше, я ничего не получаю. Я уверен, что я что-то упустил, так как форматируются строки захвата RegEx.
dirquota qu l | Out-String
выводит строку следующим образом:
... Quota Path: E:\DirA\SubdirA\SubdirA1 Share Path: \\SERVER\SubdirA\SubdirA1 \\SERVER\E\DirA\SubdirA\SubdirA1 \\SERVER\DirA\SubdirA\SubdirA1 Source Template: TemplateA (Matches template) Quota Status: Enabled Limit: 500.00 MB (Hard) Used: 6.00 KB (0%) Available: 499.99 MB Peak Usage: 6.00 KB (4/1/2015 12:27 PM) Thresholds: Warning (80%): Event Log Limit (100%): Event Log Quota Path: E:\DirB\SubdirB\SubdirB1 Share Path: \\SERVER\SubdirB\SubdirB1 \\SERVER\E\DirB\SubdirB\SubdirB1 \\SERVER\DirB\SubdirB\SubdirB1 Source Template: TemplateB (Matches template) Quota Status: Enabled Limit: 500.00 MB (Hard) Used: 1.00 KB (0%) Available: 500.00 MB Peak Usage: 1.00 KB (7/12/2016 12:09 PM) Thresholds: Warning (80%): Event Log Limit (100%): Event Log ...
Теперь это имеет смысл. Я думал, что '. *' Будет соответствовать всем символам до следующей строки, но из того, что я вижу, перестает соответствовать в новой строке? –
'.' соответствует любому символу *, кроме строк новой строки *,' * 'изменяет предыдущее выражение для соответствия нулю или более раз. –