У меня есть следующий код:
function HideTemplates($File, $Templates)
{
foreach ($Template in $Templates)
{
Write-Host $Template[0] $Template[1] $Template[2]
}
}
HideTemplates "test.xml" @(("one", "two", "three"))
HideTemplates "test.xml" @(("four", "five", "six"), ("seven", "eight", "nine"))
Это печатает:
o n e
t w o
t h r
four five six
seven eight nine
Я хочу, чтобы это распечатало:
one two three
four five six
seven eight nine
Я делаю что-то не так в своем коде? Существует ли способ вынудить PowerShell шагать многомерный массив с единственным объектом по-другому?
Вызовите вашу функцию так:
HideTemplates "test.xml" (,("one", "two", "three"))
HideTemplates "test.xml" (,("four", "five", "six"),("seven", "eight", "nine"))
Подвыражение массива, т.е. @()
ничего не делает, если содержимое уже является массивом. Вместо этого используйте оператор запятой, который всегда будет создавать массив с одним элементом вокруг всего, что следует за ним. Обратите внимание, что необходимо добавить дополнительный набор паренсов, иначе это:
HideTemplates "test.xml",("one", "two", "three")
будет считаться одним аргументом типа массив вместо двух аргументов.