I have this string in PowerShell:
$filter = "Name;Server;Mounted;ObjectCategory;Guid;WhenChangedUTC;WhenCreatedUTC;ObjectState"
I want to split it to get an object array, I tried:
$stringArray = $filter.Split(';')
but it's a string array.
At the end I would like to call:
... | Select-Object -Property @{Name = 'Command'; Expression = { "Insert" } }, $filterObjectArray
The $filterObjectArray doesn't work when it's a string array.
But it works if $filterObjectArray = 'Name', 'Server'
...
The problem is my custom property called Command because if I only use :
... | Select-Object -Property $filterObjectArray
it works.
Thank you for your help.
Your
-Property
argument must be passed as a flat array, which requires use of an expression:Note:
Because an expression is required that is to serve as a command argument, it must be enclosed in
(...)
, the grouping operator.,
, the array constructor operator, is used to wrap the script block ({ ... }
) in a single-element array so that applying the+
operator on it performs array concatenation, which means that the elements of the RHS array,$filterObjectArray
, directly become elements of the resulting array, resulting in the necessary flat array of calculated properties and property names.As for what you tried:
This argument, parsed in argument mode, results in a nested array: the first element is the script block (
{ ... }
), and the second and last element is the$filterObjectArray
array as a whole, which is why the names stored in it weren't recognized.Note that in argument mode - one of PowerShell's two fundamental parsing modes - only a small subset of operators can be used, such as
,
and@
, the splatting operator; to use others, such as+
, a grouping expression ((...)
) is needed, as shown (or, for using the output from entire statements as arguments,$(...)
or@(...)
)