开发者

Why is my PowerShell multi dimensional array being interpreted as a 1 dimensional array?

I have the following code:

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开发者_StackOverflow社区", "nine"))

It prints:

o n e
t w o
t h r
four five six
seven eight nine

I want it to print:

one two three
four five six
seven eight nine

Am I doing something wrong in my code? Is there a way to force PowerShell to tread a multi-dimensional array with a single item differently?


Call your function like so:

HideTemplates "test.xml" (,("one", "two", "three"))
HideTemplates "test.xml" (,("four", "five", "six"),("seven", "eight", "nine"))

An array subexpression ie @() does nothing if the contents are already an array. Use the comma operator instead which will always create an array with one element around whatever follows it. Note that you have to add an extra set of parens otherwise this:

HideTemplates "test.xml",("one", "two", "three")

Would be considered a single argument of type array instead of two arguments.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜