2

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.

0

1 Answer 1

4

Your -Property argument must be passed as a flat array, which requires use of an expression:

# Note: Target parameter -Property is positionally implied.
Select-Object (, @{Name = 'Command'; Expression={ "Insert" }} + $filterObjectArray)

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:

@{Name = 'Command'; Expression = { "Insert" } }, $filterObjectArray

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 @(...))

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.