Sim, isso parece ser exatamente o que está acontecendo (BTW, você nem precisa de aspas ao redor da string de comando enquanto invoca).
De acordo com a descrição da ajuda do cmdlet (obtida por meio de get-help Invoke-Expression -full
):
iex [-Command] <String> [<CommonParameters>]
Invoke-Expression [-Command] <String> [<CommonParameters>]
The Invoke-Expression cmdlet evaluates or runs a specified string as a command and returns the results of the expression or command. Without Invoke-Expression, a string submitted at the command line would be returned (echoed) unchanged.
An expression is a statement that can be evaluated and produces a result, such as a Windows PowerShell command.
Se o comando armazenado na variável string não for muito complexo, você também poderá usar o operador de chamada (& ;) da seguinte forma:
& $string
Mais detalhes cortesia esta página :
If the result of the expression is an empty array, invoke-expression will output $null
Invoke-Expression can be used to perform string expansion but if the string is supplied by an end-user you need to ensure that it does not contain malicious code/expressions.