His counterpart, Ubaldo Jimenez, and the Indians' bullpen were just a bit better, sending the Astros to their eighth loss in their past 10 games.
"It's tough. It's tough," catcher Chris Snyder said. "We're getting close to the [All-Star break] here and we need to push. We need to push through this."
Indians leadoff man Shin-Soo Choo tripled in the first on the third pitch from Harrell. Asdrubal Cabrera then flew out to deep left, bringing Choo home and giving the Indians a 1-0 lead that held up. They added a run in the ninth on an RBI single by Michael Brantley.
The Astros, a season-high 14 games under .500, threatened to tie the game in the first. After a walk and steal by Jordan Schafer with one out, Jed Lowrie walked. The next batter, Carlos Lee, hit a ground ball that deflected off Jimenez's glove into the glove of a charging Jason Kipnis, who threw out Lee at first. Lowrie stalled between first and second, getting in a rundown. Schafer tried to score and was easily tagged out by Carlos Santana.
In the fifth, the Astros put runners on first and second again, but Jimenez retired Jose Altuve on a flyout and struck out Schafer to end the inning.
Jimenez (7-5) left the game after putting two runners on in the seventh. He gave up four hits, walked four and struck out eight in 6 2/3 innings.
Snyder, who had faced Jimenez 13 times, said he never sees the same pitching repertoire from the 28-year-old right-hander. On Friday, Snyder said Jimenez was working with a hard sinker.
"I think what you've seen from him is he's starting to pitch," Snyder said. "He's always had good stuff. Now, he's pitching with it. He had a good night."
Indians reliever Joe Smith got out of the seventh by striking out Altuve. Vinnie Pestano pitched a scoreless eighth, and closer Chris Perez struck out the side to pick up his 23rd save.
The Astros' punchless approach at the plate wasted an extremely effective outing from Harrell, who leads National League rookies in innings pitched with 88 2/3.
After giving up the triple to Choo in the first, Harrell retired 18 of the next 19, only walking Santana in the fourth. He faced trouble in the seventh, when the Indians loaded the bases with one out, but he got Casey Kotchman to fly out in foul territory in right field. Santana sprinted for home, but Brian Bogusevic drilled Santana at the plate with a strong throw from right field, drawing a fist pump from Harrell.
"The one thing about Bogie is that he's got that strong, accurate arm," manager Brad Mills said. "We needed it, and he made a nice one-hop throw."
Harrell (6-6) threw 104 pitches, 59 for strikes. As a contact pitcher, he said he wasn't looking for strikeouts. He actually prefers to get quick outs with ground balls.
"Today, I just happened to get lucky and they fell my way," Harrell said.
Snyder said Harrell threw a lot more cutters against an Indians lineup with many left-handed hitters. Indians manager Manny Acta was impressed by Harrell's performance on the mound.
"He pitched very well, working very fast, and had a good cut fastball that he cut into our left-handed hitters," Acta said.
In the last five games, Astros starters have a 2.25 ERA over 32 innings. The Astros are 1-4 over that span, averaging 2.6 runs per game.
Mills said the team addressed some hitting issues before the game, but he admitted that he didn't see much improvement in the team's two-strike approach. The Astros struck out 12 times.
Snyder, who went 0-for-3 with three left on base, said it's incredibly difficult to prepare for game situations in the batting cage or during batting practice.
"You can't simulate a guy throwing a 94-mph sinker," Snyder said. "You can't simulate bases loaded with two outs in the bottom of the seventh. When that situation comes about, that's when you get paid."
Snyder is confident that results will come soon. In his opinion, all it takes is one well-timed hit to break the funk.
"We've got to swing our way out of it," Snyder said. "That's all there is."