Updated

Carlos Lee is long gone. And for the moment, so is the Houston Astros' offense.

Bud Norris tossed seven solid innings Thursday night, but the Astros struggled against Jeff Karstens and fell 2-0 at Pittsburgh for their eighth consecutive loss.

"It's a tough road trip for us," said Norris, who dropped his fifth consecutive decision. "We're excited to go home. We've got three games before the (All-Star) break. It's a tough little stretch here but we've got to keep playing hard, keep battling and see what we can do."

The Astros couldn't do anything against Karstens (2-2), who kept them off balance all night. Houston managed just four hits — all of them singles — and didn't get a runner to third base until there were two outs in the ninth inning.

"There's no doubt we want to reverse what's going on," manager Brad Mills said.

Garrett Jones and Casey McGehee each drove in a run for Pittsburgh, which has won eight of nine to vault into first in the NL Central. Joel Hanrahan pitched the ninth for his 22nd save, completing Pittsburgh's first four-game home sweep of the Astros since 1979

Norris (5-6) allowed both runs and five hits, struck out six and walked three, but remained winless since May 21.

"He was able to work out of a lot of jams," Mills said. "He battled through it when he had runners in scoring position, that was good to see."

While the Astros are struggling, the Pirates are rolling behind an offense that has been among the hottest in the National League over the last six weeks.

There were no such fireworks on Thursday, but Karstens looked sharp after spending nearly two months on the disabled list earlier this season with shoulder inflammation and a hip flexor.

Deftly mixing his fastball with a curveball that followed orders, Karstens kept the Astros off balance all night. The right-hander threw 62 of his 89 pitches for strikes and looked an awful lot like the pitcher who spent the first half of the 2011 season among the NL leaders in ERA.

He tailed off as he piled up the innings last season and his problematic shoulder raised eyebrows this year. He got knocked around by Philadelphia in his return on June 17 but followed that up with seven efficient innings in 99-degree heat against St. Louis last Saturday.

It was more of the same against the Astros. Hard-hit balls were scarce as Houston was shut out for the eighth time this season.

"It's just one of those things you try to bear down and make pitch after pitch," Karstens said. "We were able to throw strikes when we had to."

The Pirates needed Karstens to be sharp after squandering a couple of opportunities to break the game open against Norris.

Jones and McGehee led off the second with back-to-back doubles to get the Pirates on the board but McGehee was stranded at third. The Pirates loaded the bases an inning later but could only muster Jones' sacrifice fly.

Another rally in the fifth was stopped short when Drew Sutton was picked off second, the kind of baserunning miscue that's been rare lately for baseball's biggest surprise.

Pittsburgh is 10 games over .500 for the first time since 1992, the last time it made the playoffs. Nearly two decades of losing have followed, but optimism is continuing to grow.

"We're confident, not cocky," Pirates manager Clint Hurdle said. "But we've worked hard to get to this spot. We're making our way."

Houston, meanwhile, can't wait to get home after a dreadful 0-7 road trip. Chris Johnson got the start at first in place of Lee and went 0 for 4. Third baseman Matt Dominguez, one of two players the Astros acquired for Lee, went hitless in two at-bats but was clean in the field.

NOTES: The Astros called up reliever Enerio Del Rosario from Triple-A Oklahoma City to give the weary bullpen some help while sending left-handed starter Dallas Keuchel down for at least 10 days. ... The Pirates open a three-game series with San Francisco on Friday. Erik Bedard (4-9, 4.57 ERA) starts for Pittsburgh against Barry Zito (6-6, 3.84). ... The Astros return home Friday to play the Brewers. J.A. Happ (6-8, 4.81 ERA) faces Milwaukee's Yovani Gallardo (6-6, 3.87).