I find there are a couple of problems with explicitly yielding a thread via .Sleep() or other means when you are just making sure it doesn't take over the processor. The first is that it just makes your code look poor as it's sprinkled with Thread.Sleep(0). You can comment every instance but it doesn't look great.
The next problem is that you can only yield the code you control. This doesn't help at all if part of the long running script calls a long running function you have no control over.
Instead I would alter the ThreadPriority during the long running operation to be BelowNormal or Lowest. This will solve both problems and likely will be more effecient as the OS can now make a more informed decision as to when to page you out.
[Thread]::CurrentThread.ThreadPriority = System.Threading.ThreadPriority.Lowest