Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 循环段落,创建单个对象_Regex_Powershell_Switch Statement - Fatal编程技术网

Regex 循环段落,创建单个对象

Regex 循环段落,创建单个对象,regex,powershell,switch-statement,Regex,Powershell,Switch Statement,我需要从2008 R2服务器上的dirquotau l命令中获取以下输出,遍历每一行,将每个自动配额路径的相关数据添加到其自己的唯一对象,然后将所有对象添加到数组中。见下例: Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\S

我需要从2008 R2服务器上的
dirquotau l
命令中获取以下输出,遍历每一行,将每个自动配额路径的相关数据添加到其自己的唯一对象,然后将所有对象添加到数组中。见下例:

Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning ( 80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning ( 80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning ( 80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\SubDir \\SERVER\E\Dir\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning ( 80%): Event Log Limit (100%): Event Log Auto Apply Quota Path: E:\Dir\SubDir Share Path: \\SERVER\E\Dir\SubDir \\SERVER\SubDir \\SERVER\Dir\SubDir Source Template: Template (Matches template) Limit: 500.00 MB (Hard) Thresholds: Warning ( 80%): Event Log Limit (100%): Event Log
显然,
switch
语句还有更多内容,我只想让第一行按预期工作,然后添加其余的。如果有更简单/更好的方法,我愿意接受建议。

将命令输出转换为单个字符串,并在两个连续的换行符处拆分该字符串(Windows将换行符编码为CR-LF,因此每个换行符都需要
\r\n

(dirquota l | Out字符串)-拆分'\r\n\r\n'
然后使用正则表达式进行筛选,该正则表达式将要从子字符串中提取的值分组,并直接从匹配项构造对象:

$re='自动应用配额路径:\s+(.*)[\s\s]*?'+
'源模板:\s+(.*)\s+'+
'限制:\s+(.*)'
... | 其中对象{$\匹配$re}ForEach对象{
新对象-类型PSObject-属性@{
路径=$matches[1]
模板=$matches[2]
限制=$matches[3]
}
}

将命令输出转换为单个字符串,并在两个连续换行符处拆分该字符串(Windows将换行符编码为CR-LF,因此您需要为每个换行符使用
\r\n

(dirquota l | Out字符串)-拆分'\r\n\r\n'
然后使用正则表达式进行筛选,该正则表达式将要从子字符串中提取的值分组,并直接从匹配项构造对象:

$re='自动应用配额路径:\s+(.*)[\s\s]*?'+
'源模板:\s+(.*)\s+'+
'限制:\s+(.*)'
... | 其中对象{$\匹配$re}ForEach对象{
新对象-类型PSObject-属性@{
路径=$matches[1]
模板=$matches[2]
限制=$matches[3]
}
}

试试这样的方法

$template=@"
{Groupement*:Auto Apply Quota Path:  {QuotaPath:c:\Tmp\tmp2}
Share Path:             {SharePaths:\\Server\
                        Yy2
                        Zz3}
Source Template:        {SourceTemplate:Template xxx (Matches template)}
Limit:                  {Limit:600.00 MB (Hard)}
Thresholds:
   Warning ( 80%):      {TWarning:Event0 Log0}
   Limit (100%):        {LWarning:Event0 Log0}}

{Groupement*:Auto Apply Quota Path:  {QuotaPath:Zxx}
Share Path:             {SharePaths:Xx3
                        Yy4
                        Zz5}
Source Template:        {SourceTemplate:Template (Matches template)}
Limit:                  {Limit:500.00 MB}
Thresholds:
   Warning (100%):      {TWarning:Event1 Log1}
   Limit (100%):        {LWarning:Event1 Log1}}
"@

$result=$AutoQuota | ConvertFrom-String -TemplateContent $template
$result.groupement | select QuotaPath, SharePaths, SourceTemplate, Limit, TWarning, LWarning 

试试这样的

$template=@"
{Groupement*:Auto Apply Quota Path:  {QuotaPath:c:\Tmp\tmp2}
Share Path:             {SharePaths:\\Server\
                        Yy2
                        Zz3}
Source Template:        {SourceTemplate:Template xxx (Matches template)}
Limit:                  {Limit:600.00 MB (Hard)}
Thresholds:
   Warning ( 80%):      {TWarning:Event0 Log0}
   Limit (100%):        {LWarning:Event0 Log0}}

{Groupement*:Auto Apply Quota Path:  {QuotaPath:Zxx}
Share Path:             {SharePaths:Xx3
                        Yy4
                        Zz5}
Source Template:        {SourceTemplate:Template (Matches template)}
Limit:                  {Limit:500.00 MB}
Thresholds:
   Warning (100%):      {TWarning:Event1 Log1}
   Limit (100%):        {LWarning:Event1 Log1}}
"@

$result=$AutoQuota | ConvertFrom-String -TemplateContent $template
$result.groupement | select QuotaPath, SharePaths, SourceTemplate, Limit, TWarning, LWarning 

看来这让我走上了正轨。唯一的问题是我只从第一块数据中得到一个结果。我正在用管道输入
(dirquotau l | Out String)-将“\n\n”
拆分到
对象的位置
,对吗?@ashhouseares是的。不过,换行符可能编码为CR-LF,因此也请检查
-split'\r\n\r\n'
。也检查空白行是否保留在捕获的命令输出中,空白行不包含其他的空白。OK,因此<代码> -s\\\\n\/COD>实际上不会分裂字符串,因为输出只包含1个元素,所以它与第一组匹配,就是这样。如果我在一个新行上拆分,我会得到53个元素,正如预期的那样,因为有53行输出。我怀疑由于某种原因,在两行新行上拆分不起作用,可能是因为字符串输出的格式?是的,关于CR-LF格式,您是正确的。我刚刚测试了输出中的7个元素,所以这正好满足了我的需要。非常感谢。我刚刚学到了一点。看来这让我走上了正确的道路。唯一的问题是我只从第一块数据中得到一个结果。我正在用管道输入
(dirquotau l | Out String)-将“\n\n”
拆分到
对象的位置
,对吗?@ashhouseares是的。不过,换行符可能编码为CR-LF,因此也请检查
-split'\r\n\r\n'
。也检查空白行是否保留在捕获的命令输出中,空白行不包含其他的空白。OK,因此<代码> -s\\\\n\/COD>实际上不会分裂字符串,因为输出只包含1个元素,所以它与第一组匹配,就是这样。如果我在一个新行上拆分,我会得到53个元素,正如预期的那样,因为有53行输出。我怀疑由于某种原因,在两行新行上拆分不起作用,可能是因为字符串输出的格式?是的,关于CR-LF格式,您是正确的。我刚刚测试了输出中的7个元素,所以这正好满足了我的需要。非常感谢。我只是学到了更多。