【发布时间】:2015-06-19 18:27:01
【问题描述】:
我正在尝试在表格的每一行中搜索一列。然后,我想根据正在搜索的数字向该行添加另一个值。
此代码生成表格:
$LUNSSummary = ($NY_LUNS) -split '\s+(?=LOGICAL UNIT NUMBER)' | foreach {
$Stringdata = $_.replace(':','=')
New-Object PSObject -Property $(ConvertFrom-StringData $Stringdata)
}
$LUNSSummary |
select 'Name','LOGICAL UNIT NUMBER','State','LUN Capacity(Megabytes)','LU Storage Groups' |
Format-Table -AutoSize
然后我有这个代码,它可以使用“逻辑单元号”进行搜索并产生所需的输出。在此示例中,-contains 是上面屏幕截图中的 1029。
$data = $LUNS_in_Pools | Out-String
$pools = $data -replace ': +','=' -split "`r`n`r`n" |
% { New-Object -Type PSCustomObject -Property (ConvertFrom-StringData $_) } |
select -Property *,@{n='LUNs';e={$_.LUNs -split ', '}} -Exclude LUNs
$pools | ? { $_.LUNs -contains 1029 } | select -Expand 'Pool Name'
在这种情况下产生“池 2”。结果可能是池 1-99。
我想结合这两个代码来搜索每个“逻辑单元号”并将结果添加到第 5 节/列“池”中的表格末尾。
编辑
根据要求,原始数据:
-
$NY_LUNS在$LUNSSummary得到它之前:http://pastebin.com/5wrd51Lf -
$LUNS_in_Pools原始数据:http://pastebin.com/Zg9q6jhe
期望的输出:(池是从“逻辑单元号”中获得的)
编辑 2
这是迄今为止最接近正确的,每次都打印相同的池结果。
$LUNSSummary =
($NY_LUNS) -split '\s+(?=LOGICAL UNIT NUMBER)' |
foreach { $Stringdata =
$_.replace(':','=')
New-Object PSObject -Property $(ConvertFrom-StringData $Stringdata)
}
$data = $LUNS_in_Pools | Out-String
$pools = $data -replace ': +','=' -split "`r`n`r`n" |
% { New-Object -Type PSCustomObject -Property (ConvertFrom-StringData $_) } |
select -Property *,@{n='LUNs';e={$_.LUNs -split ', '}} -Exclude LUNs
$poolProperty = @{Label="Pool";Expression={$pools | ? { $_.LUNs -contains [int]$_.'LOGICAL UNIT NUMBER'} | select -Expand 'Pool Name'}}
$LUNSSummary | select 'Name','LOGICAL UNIT NUMBER','State','LUN Capacity(Megabytes)','LU Storage Groups',$poolProperty
如果我检查$pools | ? { $_.LUNs -contains [int]$_.'LOGICAL UNIT NUMBER'} | select -Expand 'Pool Name'的输出
我只看到一个结果。我在想也许它必须以某种方式循环?
【问题讨论】:
-
您能否在问题中以文本形式发布一些真实的原始数据,尤其是
LUNS_in_Pools中的相关数据列。重要的是所需输出的样本。 -
赞赏。以及所需输出的样本,以便我们知道我们的目标是什么?
-
@Kev 没问题。还添加了所需的输出。
-
听起来你只需要一个计算表达式来匹配你。你已经完成了这项工作。您只是将
Logical Unit Number与$pools中的关联结果匹配? -
没错,然后将其添加到表格的末尾。
标签: arrays regex parsing powershell