PowerShellの罠:ファイル一覧取得が非同期のため、処理後のファイルも一覧取得されてしまう問題

ls -r *.jpg | cp $_ ".\hoge\new_$($_.Name)"

……のようなコマンドで、フォルダ以下の全jpgファイルを新しいフォルダにコピーしようとすると、「new_new_xxx.jpg」のようなファイルが出来てしまう。
これはlsの処理結果がlsの処理実行途中でもどんどんパイプラインに送られてしまうという仕様が原因だと思う。
lsでファイル走査中に、new_xxxx.jpgがコピーが作成され、それもファイル走査の対象になってしまうのだ。
対策としては以下のようにすれば、lsの処理が完了したあとでcpを行える。

(ls -r *.jpg) | cp $_ ".\hoge\new_$($_.Name)"