I came to the US from Canada under TN status, and later switched to an H1B so I could get a green card. I used to think it was a good thing, but I have since changed my mind.
The Wikipedia article for the H1B outlines most of the problems, but I'll talk about my experience.
When I moved from Canada to the US (for a software engineering role), I thought I getting a huge raise. It was about twice what I was earning in Canada prior, so for me personally it was a big step up, but what I didn't realize at the time is that they were actually paying me about 50% below the market rate in the US. At the time I was making about $56k/year in Canada (in CAD, about $40k USD), and I was hired at around $85k/year in the US. This was in 2009. What I realized soon after, was that someone with my experience was making about twice that much in the US.
It wasn't until I got a green card (which took 5 years) that my salary adjusted upward to the market rate. The company that helped me get my green card was Airbnb, but even back then they hired me (while I was still on a TN) well below the market rate. I managed to negotiate my salary up, but I was still anchored near the bottom of my cohort.
While working at these companies (including Airbnb), I felt trapped because I could not easily quit or search for a better paying job. My employers knew this, since according to the rules I'm required to leave the country if I lose or quit my job. Many companies also don't want to deal with H1Bs or TNs because they don't want the fuss of dealing with immigration problems.
While waiting for my green card to arrive, I was trapped at Airbnb for about 2 years. They actually fired me from my job before my green card arrived, and were kind enough to let me wait a few more months until I had the card in hand before I officially left the company. In those months I pretty much just sat around, enjoyed the nice lunches and dinners, and hung out with coworkers.
I think immigration is great, but I think these employment based visas only work well for employers. They make it easy to hire cheap workers at below market rates, and have them stick around because they can't leave. I think we need real immigration reform, or, better yet, allow companies to hire the best people and make it illegal to discriminate based on nationality. The TN/H1B system is just legalized discrimination.