Today, I had the crazy idea of outputting an array in PowerShell as a table, and I wanted to show the index of each array value.
In laymen's terms: I wanted my table output to be line numbered. And I wanted to line numbers to correspond to the position in the array.
Why? because I didn't want the user to type in a name string or a GUID string that they might typo, they could simply enter the index of the item(s).
Trying to solve potential problems upfront, without a bunch of error handling code.
I started out with a PowerShell array that looked something like this:
PS\> $allFlows | ft name, flowid -AutoSize
name flowId
---- ------
bjeDemoFlow_working 70bd3881-8224-11e4-8019-f97967ce66a8
bje_cmdblu 3e155fe0-dc9a-11e4-9dfc-f7587e2f6b74
Pulser_WorkerFlow_Sample f945f94f-fb33-4181-864d-042548497270
Flow d59ae1e8 d59ae1e8-0220-4fd2-b40f-fba971c9cf42
bjeConnectTheDots.io 204b5897-2182-4aef-84fe-1251f1d4943b
StageFlow_1 796d0ff4-94d6-4d1a-b580-f83ab98c7e15
Flow f26aab2f f26aab2f-783b-4c09-b1fc-9e6433e8ab37
Flow c983c204 c983c204-5a87-4947-9bd2-435ac727908a
v2VDA Test ba5f77af-98d1-4651-8c35-c502a72ccea8
Demo_WorkerFlow e7efdac4-663d-4fb6-9b29-3a13aac5fb97
Now for the strange part. How do I number the lines in a way that they correspond to each items position in the array?
Search did not fail me today, but it took a bit of effort to discover an answer in StackOverflow from PowerShell MVP Keith Hill.
And, also looking at Get-Help Format-Table -Examples and realizing that there is an 'expression' option to calculate the value of a field in the table output.
PS\> $allFlows | ft @{Label="number"; Expression={ [array]::IndexOf($allFlows, $_) }}, name, flowid -AutoSize
number name flowId
------ ---- ------
0 bjeDemoFlow_working 70bd3881-8224-11e4-8019-f97967ce66a8
1 bje_cmdblu 3e155fe0-dc9a-11e4-9dfc-f7587e2f6b74
2 Pulser_WorkerFlow_Sample f945f94f-fb33-4181-864d-042548497270
3 Flow d59ae1e8 d59ae1e8-0220-4fd2-b40f-fba971c9cf42
4 bjeConnectTheDots.io 204b5897-2182-4aef-84fe-1251f1d4943b
5 StageFlow_1 796d0ff4-94d6-4d1a-b580-f83ab98c7e15
6 Flow f26aab2f f26aab2f-783b-4c09-b1fc-9e6433e8ab37
7 Flow c983c204 c983c204-5a87-4947-9bd2-435ac727908a
8 v2VDA Test ba5f77af-98d1-4651-8c35-c502a72ccea8
9 Demo_WorkerFlow e7efdac4-663d-4fb6-9b29-3a13aac5fb97
The values for the column are defined as a hashtable @{}
With the Label of the column and the Expression that defines the value.
Pretty nifty new trick to add to my repertoire.
No comments:
Post a Comment