[править - я разместил не ту версию. спасибо Джонатону Краудеру за то, что он указал, что 2-й день не был добавлен в таблицу поиска.]
кажется, это делает то, что я думаю вы действительно хотите ... получить имена виртуальных машин для тех, с которыми нужно иметь дело в определенный день.
я думаю это то, что вы хотите. [ ухмылка ]
# fake reading in a text file
# in real life, use Get-Content
$InStuff = @'
[[VM1],[Monday, Thursday]]
[[VM2],[Sunday]]
[[VM3],[Wednesday, Saturday]]
[[VM5],[Monday, Thursday]]
[[VM6],[Tuesday, Friday]]
'@ -split [environment]::NewLine
$DayNames = (Get-Culture).DateTimeFormat.DayNames
$DailyLookup = @{}
foreach ($DN_Item in $DayNames)
{
$DailyLookup.Add($DN_Item, '')
}
foreach ($IS_Item in $InStuff)
{
# forgot to trim out the leftover space on the 2nd day name
#$SplitIS_Item = $IS_Item.Split(',').Trim('[]')
$SplitIS_Item = $IS_Item.Split(',').Trim('[]').Trim()
$VMName = $SplitIS_Item[0]
# forgot to include all the _remaining_ items
# this left out the 2nd day name
#$TriggerDays = $SplitIS_Item[1]
$TriggerDays = $SplitIS_Item.Where({$_ -ne $VMName})
foreach ($TD_Item in $TriggerDays)
{
$DailyLookup[$TD_Item] = (($DailyLookup[$TD_Item], $VMName) -join ', ').Trim(', ')
}
}
$DailyLookup['Monday']
вывод ...
VM1, VM5
это вывод строка , а не массив. поэтому вам нужно разделить и обрезать его, чтобы получить отдельные элементы виртуальной машины. у оригинала был массив, но я не был уверен, как вы хотите использовать данные.