由於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 ...
現在確定它是有道理的。我以爲'。*'會匹配所有字符到下一個字符串,但是從我看到的它會停止匹配到新行? –
'.'匹配除了換行符之外的任何字符*,'*'修改以前的表達式以匹配零次或多次。 –