It "just does" :)
PowerShell directly runs executables.
If it waits for the process to exit,
then the exit code left in
$LASTEXITCODE. Now if a Win32
executable is the last command in a
pipeline and is not redirected, then
the process will run in the
background. However, if you pipe its
output into something, then PowerShell
will wait for the command to exit.
From here with examples and details.
If you need things to run sequentially like I've run into before- pipe the output to out-null so you don't return control to the script before the pipeline finishes.
foo.msi | out-null
If you are trying to run a cmdlet, or script in the background then see the other great answers, but for executables, they are already async.