Ваша строка быть конвейеру в ForEach-Object
(%
) в виде целой строки. Там нет части вашего кода, который разбивает его на строки, поэтому он не будет обрабатываться по строкам. В результате вы получаете структуру данных, как это:
{
'c': [ "APL`nR", "6h`nH", "HN-56-78`nL", "binary`nE", "[email protected]" ]
}
Разделить строку на строки перед разбиением каждой строки в двоеточии, чтобы избежать этого:
[email protected]{}
@"
c : A P L
R : 6h
H : HN-56-78
L : binary
E : [email protected]
"@ -split "\r?\n" | %{ $v,$k = $_ -replace ' ' -split '\s*:\s*' ; $h.Add($v,$k) }
$h.Count
Я также интегрировал предложение Ansgar в ваш другой раскол , положив \s*
по обе стороны от :
. Это поймает любые пробелы как часть разделителя и не включит их в ваши результирующие значения.
Просто дважды проверяйте ... вы планируете прочитать этот ввод из файла? Или вы боретесь с синтаксисом для объявления предварительно инициализированной хеш-таблицы напрямую? '$ h = @ {" c "=" A P L "; "R" = "6h" ,,,} ' –
Ввод будет считан из файла. – xaccor
Если вы пишете файл из PowerShell, подумайте также об использовании одного из командлетов Export- * - тогда чтение содержимого обратно может быть проще. –