Invoke-Expression accepts a string and treats it as PowerShell code which allows the construction of dynamic code, this means that you have to be very careful about the string input. If input is accepted from a user or any third party source, there is a possibility that they could inject unwanted additional PowerShell commands into the script with undesirable effects.

Invoke-Expression performs string expansion, so for example iex "echo Hello World $PsHome" will outputHello
World
C:\\System32\WindowsPowerShell\v1.0

If the result of the expression is an empty array, invoke-expression will output $null

Using Invoke-Expression to run a set of commands is similar to using the & call operator but has a key difference in that invoke-expression does not create an additional scope, so any changes to variables made by the script block will remain visible.

Example

Create variables named $sorting and $MyExpr and use them to store the text of an expression, then use invoke-expression to actually run the expression:

“Innovation is the distinction between a leader and a follower” ~ Steve Jobs

Related:

Get-Command - Retrieve basic information about a command.Invoke-Command - Run commands on local and remote computers.Invoke-Item - Invoke an executable or open a file (START)Invoke-History - Invoke a previously executed Cmdlet.Start-Process - Start one or more processes, optionally as a specific user.Trace-Command - Trace an expression or command.--% - Stop parsing input as PowerShell commands.. (source) - Run a command script in the current shell (persist variables and functions.)& (call) - Run a command script.