A well-placed grounder, which turned into a game-winning double, arrived too late Friday night to end James Shields’ run of tough luck, but the Royals ran their winning streak to three with a 4-2 victory over the Houston Astros.

“I feel like our luck has turned,” designated hitter Billy Butler said. “I feel like we’re getting some breaks and making some really good plays defensively. Things are going our way right now.”

It was Butler who yanked a one-out RBI grounder past third in the eighth inning that produced the go-ahead run. David Lough, who earlier turned in the game’s top defensive play, later added an RBI double.

And with that, like a slot machine’s bells jangling, the Royals had reached their magical four-run threshold. The Royals are now 19-5 when they score at least four runs.

“As an offense we’re starting to put up some runs and get some timely hits,” first baseman Eric Hosmer said.

“We can still do a better job of getting out a little earlier and putting up some runs, but we’ll take a win any way we can get one.”

When Greg Holland closed out the victory for his 11th save in 13 chances, the Royals, 26-32 overall, had their first three-game winning streak since a four-game run from April 30 to May 5.

The two-run eighth, which came against Astros relievers Wesley Wright, 0-2, and Josh Fields, simply came too late to reward Shields for his continued excellence.

The victory, instead, went to Kelvin Herrera, 3-4, who inherited a 2-2 tie from Shields to start the eighth inning.

“It’s a good overall win,” Shields said. “We’re scrapping. I think we’re starting to hit better now, and we’re scoring some runs, so it’s good to see.”

After Herrera worked a one-two-three eighth inning, the Astros went to their bullpen for Wright in relief of Jordan Lyles.

Hosmer won a left-on-left battle against Wright by looping a leadoff single into center. That prompted another Houston pitching switch — to Fields, who retired Salvy Perez on a foul pop to first.