9/10 times if you are trying to use the Invoke-Expression
cmdlet, there is a better way. Building the arguments to a command dynamically? Use an array of arguments. Building the arguments to a cmdlet? Use splatting with an array or hashtable. Your command has a space in the path to it? Use the call operator (&
).
This might seem open ended, but Invoke-Expression
is an easily accessible cmdlet where the answer is almost always to never use it. But the cmdlet exists for a reason, is not deprecated, and most criticisms of its use state something similar to, "it's almost never the right answer", but never states when it is acceptable to use it. In what case is it acceptable to use Invoke-Expression
? Or to word it a bit less openly, how was Invoke-Expression
designed to be used?
Invoke-Expression
for running scripts entirely constructed within Powershell for most circumstances. So my takeaway is that there is always a better solution thanInvoke-Expression
. – Runaway