It wasn’t perfect, but it was pretty close.

Zack Greinke, the Dodgers' $147-million man, threw a two-hit shutout, all while taking a perfect game into the fifth inning for the Dodgers' 17th win in 21 games.

Greinke (8-2) threw only 110 pitches, struck out nine and walked one in a 1-0 win over the Colorado Rockies in front of a sold-out crowd of 51,992 at Dodger Stadium. It was the fourth complete game of Greinke's career.

BOX SCORE: Dodgers 1, Rockies 0

Rockies first baseman Todd Helton broke up Greinke’s perfect effort with one out in the fifth on a line-drive single to left-center field.

The former Cy Young Award winner was coasting early, needing only 34 pitches to get through four innings while Dodger Stadium turned into a concentrated hush every time he delivered a pitch.

Greinke is still undefeated in seven starts at home this season.

For the second consecutive game, the Dodgers managed only four hits but gave Greinke a little bit of breathing room from the start. Right fielder Skip Schumaker, who started in place of the injured Yasiel Puig, led off the first inning with a double and scored on a groundout from shortstop Hanley Ramirez, his fifth RBI in the last six games.

Both Puig and left fielder Carl Crawford were scratched from the starting lineup. Crawford has missed the last two games with lower back stiffness, while Puig is still bothered by an ailing left hip that forced him to leave the last two games early.

Puig is listed as day to day and was available to pinch-hit Saturday, if needed.

After struggling for much of the season, the Dodgers have gone 14-3 in their last 17 games against the NL West. The Dodgers now sit two games behind the first-place Arizona Diamondbacks and could move to within 1 1/2 games if the Diamondbacks lose to the Milwaukee Brewers on Saturday.

The Dodgers will send recent arrival and Rialto native Ricky Nolasco (6-8, 3.70 ERA) to the mound Sunday for their last game before the All-Star break against the Rockies' Jhoulys Chacin (8-4, 3.62 ERA).