Unless you feel there's a specific need to do things the way you're doing them, you might want to look into using PowerShell background jobs instead.
Background jobs allow you to run PowerShell commands in a separate PowerShell instance and then collect the output from those jobs into a variable (if that's what you want to do).
Check out the about_Jobs help topic for more information.
Here's a quick example:
$job = Start-Job -ScriptBlock { "Hello World!" }
$ret = Receive-Job $job -Wait -AutoRemoveJob
# value of $ret will be "Hello World!"