O que você precisa é de uma tabela de hash para armazenar seus resultados. Uma tabela de hash é uma coleção de pares de valores-chave. No seu caso, as chaves serão as strings "ACBXYZ-0000", e os valores serão "hello" strings. As chaves nas tabelas de hash são únicas, exatamente o que precisamos aqui.
Por exemplo:
$myHash = @{}
$myHash["ACBXYZ-0001"] = "hi there" # set a value
Write-Output $myHash["ACBXYZ-0001"] # retrieve the value
Eu reescrevi seu script para usar uma tabela de hash aqui:
$list = gc text.txt
$out = @{}
$list | select-string "^(ACBXYZ-\d+)(.*)" |
% { $out[$_.Matches[0].Groups[1].Value] = $_.Matches[0].Groups[2].Value.Trim(' ,-') }
$out
Isso dá isto:
Name Value
---- -----
ACBXYZ-0000 hello again
ACBXYZ-0001 world
Você pode ver que o segundo "ACBXYZ-0000" substituiu o primeiro. Se você não gostar disso, pode verificar antes de armazenar uma chave para ver se ela existe na tabela de hash com $out.ContainsKey()
.
Deixarei para você descobrir como gerar os resultados como uma lista classificada de strings. Deixe-me saber se você tem problemas.
Apenas por diversão, eu também reescrevi seu script para mais como eu faria:
$list = gc text.txt
$out = @{}
$list | % {
if ($_ -match "^(ACBXYZ-\d+)(.*)")
{
$out[$matches[1]] = $matches[2].Trim(' ,-')
}
}
$out