1

I would like to send an output of a PowerShell multidimensional array using Format-Table.

Here is my sample code:

$a = ('mickey', 1,'pluto'),('qwer', 2, 'fluffy'),('prague', 1, 'new york')

foreach ($i in $a) {
    $value = 0
    if (($i[0] -eq 'mickey') -and ($i[2] -eq 'asdf')) {
        $i[1]++
        break
    } else {
        $value = 1
    }
}


if ($value -eq 1) {
    $a += ,@('mickey', 1, 'asdf')
    $value = 0
}

$a

Which would output:

mickey
1
pluto
qwer
2
fluffy
prague
1
new york
mickey
1
asdf

I would like to format this output using PowerShell Format-Tables. The separation looks neat and tidy, and the code I'm sending to it is larger than what you see.

I know I can use foreach and loop over it with the text side by side:

for ($i=0; $i -lt $a.length; $i++) {
    $a[$i][0] + " " + $a[$i][1] + " " + $a[$i][2]
}

However the output view is not what I like, and something like a header for each section would be nice.

I was thinking of something like this , but alas I could not get it to work: $a | Format-Table -Property @{Name = 'Name'; Expression = {$_[0]}; Width = 20; Align = 'left'}

Any ideas/guidance welcome.

0

1 Answer 1

3

Define the properties that will make up the table columns through Select-Object and only afterwards pass to Format-Table. The Format-Table cmdlet requires an object (e. g. [PSCustomObject]) as input, which Select-Object generates.

$a | Select-Object -Property @{ Name = 'Name'; Expression = { $_[0] } } |
     Format-Table -Property @{ Expression = 'Name'; Width = 20; Align = 'left' }

We use a trick to simplify the Format-Table line. By assigning a string instead of a scriptblock to Expression, we select the column to which formatting shall be applied. This is equivalent to:

Format-Table -Property @{ Name ='Name'; Expression = { $_.Name }; Width = 20; Align = 'left' }

Output:

Name
----
mickey
qwer
prague
mickey
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.