由于PS FSRM模块不可用,我在2008 R2文件服务器上运行以下命令来提取配额信息。当匹配$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的任意组合都可以工作,因此它似乎捕捉串是正确的在一定程度上,但只要我尝试添加第三或更多,我什么也得不到。我确定我错过了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 ...
现在确定它是有道理的。我以为'。*'会匹配所有字符到下一个字符串,但是从我看到的它会停止匹配到新行? –
'.'匹配除了换行符之外的任何字符*,'*'修改以前的表达式以匹配零次或多次。 –