So far you have seen a couple answers and comments showing you how to do just what you asked for. But I have to echo @BillStewart's comment: what is your true purpose?
If it is to be able to execute some arbitrary PowerShell that you have in a string, you could certainly invoke powershell.exe, as you have seen in a couple answers and comments. However, if you do that be sure to include the -noprofile parameter for improved efficiency. And for even more efficiency, you could use Invoke-Command without having to spin up a whole separate PowerShell environment, e.g.
Invoke-Command -ScriptBlock ([Scriptblock]::Create('echo $args[0]')) -arg 123, 456
If, on the other hand, you want to execute a chunk of PowerShell (not within a string but just separate in your script for whatever reason), you can simplify to this:
Invoke-Command -ScriptBlock {echo $args[0]} -arg 123, 456
Whenever you have the choice though, avoid manipulating strings as executable code (in any language)! The oft-used way to do that in Powershell is with Invoke-Expression, which I mention only to point you to the enlightening article Invoke-Expression considered harmful.
powershell.exe -command {echo $args[0]} -args 123,456