何がしたいかっていうと、AWS EC2で使うボリューム情報をCSVに書いておいて、サイズやデバイス名ごとに配列に入れたいのです。
個人的に今回肝だったのが New-Object System.Collections.ArrayList
これと if ( $_ -like "" )
# array sample
# MADEBY zin@alterworks.tokyo
# DATE 2021-01-09
# Charset Shift_JIS
Set-Location -path $PSScriptRoot
$arrtexts = Get-ChildItem array-*.txt
###### array-01.txt ######
#i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15,i16,i17,i18,i19,i20
#sv-test001,C,12,xvdd,gp2,D,5,xvde,gp2,T,6,xvdf,gp2
##########################
foreach ($g in $arrtexts) {
$arr_param = Import-Csv -Path $g -Encoding oem -Delimiter ","
$arr_letters = New-Object System.Collections.ArrayList
$arr_letter = @($arr_param.i1,$arr_param.i5,$arr_param.i9,$arr_param.i13,$arr_param.i17)
echo $arr_letter
echo $arr_letter.Count
$arr_letter | ForEach-Object{
if ( $_ -like "" ) {
echo Empty
} else {
echo --- $_
$arr_letters += $_
}
}
echo "view $arr_letters"
echo $arr_letters.Count
$arr_device = @($arr_param.i3,$arr_param.i7,$arr_param.i11,$arr_param.i15,$arr_param.i19)
$arr_device | ForEach-Object{
if ( $_ -like "" ) {
echo Empty
} else {
echo --- $_
$arr_devices += $_
}
}
echo "view $arr_devices"
echo $arr_devices.Count
}
C
D
T
5
---
C
---
D
---
T
Empty
Empty
view C D T
3
---
xvdd
---
xvde
---
xvdf
Empty
Empty
view xvddxvdexvdf
1
New-Object System.Collections.ArrayList
しないと += した値が繋がってしまう。これが難解だった。
あと if ( $_ -eq "" )
これがダメ(マッチせずに空の値もカウントされてしまう)だった。
難しいね。
今日はここまで