我試圖在表格的每一行中搜索一列。然後,我想根據正在搜索的數字爲該行添加另一個值。根據不同的對象屬性添加新屬性
此代碼將產生表:
$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節/列「池」添加到表的末尾。
EDIT
按照要求,原始數據:
$LUNSSummary
之前$NY_LUNS
得到它:http://pastebin.com/5wrd51Lf$LUNS_in_Pools
原始數據:http://pastebin.com/Zg9q6jhe
所需的輸出:(池是從「邏輯」獲得單元號「)
EDIT 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
@Kev剛添加。 – RichT
讚賞。還有一個期望的輸出樣本,所以我們知道我們的目標是什麼? – Kev