Updated

KANSAS CITY, Mo. (AP) — Roy Oswalt pitched seven solid innings and Jason Michaels drove in three runs Wednesday night, leading the Houston Astros past the Kansas City Royals 4-2.

One night after the Royals rapped out 20 hits in a 15-7 victory, Oswalt (5-8) held them to two runs and six hits and struck out seven. The Astros won for the ninth time in their last 11 outings in Kauffman Stadium and snapped a four-game losing streak.

Oswalt threw first-pitch strikes to 21 of 28 batters and went to a three-ball count only four times.

Matt Lindstrom pitched the ninth for his 15th save in 18 opportunities. It was his first appearance since June 8.

The game was delayed 1 hour, 25 minutes at the start by rain.

Bruce Chen (3-1) took the loss, his first since moving to the rotation on May 3. He went 5 2-3 innings and allowed five hits and four runs.

Jeff Keppinger doubled in the first and scored on Carlos Lee's single to put Houston ahead 1-0. Scott Podsednik then tripled leading off for the only extra-base hit the Royals would manage off Oswalt. He scored on Jason Kendall's sacrifice fly.

David DeJesus was 4 for 4, tying his career high, and drove in Kansas City's second run with an RBI single in the third. He was 3 for 6 on Tuesday night and has reached 12 times in his last three games.

The Astros loaded the bases in the fourth with a walk, a single and an error by Mitch Maier in center field, ending his streak of 190 errorless games. Michaels hit a two-run single up the middle.

Michaels' double scored Lance Berkman to make it 4-2 in the sixth.

NOTES: Commissioner Bud Selig was on hand to announce in pregame ceremonies that Kansas City would host the 2012 All-Star Game. ... It was start No. 285 for Oswalt, third on Houston's all-time list. ... Royals are in a stretch where they'll play just three of 15 games at home. ... KC put RHP Luke Hochevar on the DL with a right elbow sprain and purchased the contract of RHP Anthony Lerew from Triple-A Omaha to take his place in the rotation.