"What an effort -- six shutout innings, three hits. I tell you, the guy can pitch," Chicago manager Lou Piniella said. "And we brought in Zambrano. He got the job done."
Lilly (1-0) struck out four and walked two after being activated from the 15-day disabled list before the game. He was out while recovering from left shoulder surgery in November.
Zambrano, who declined to talk to the media after the game, gave up a run in 1 1/3 innings and had a sacrifice fly in Chicago's three-run eighth.
Doug Davis (0-2) pitched 6 1/3 strong innings for Milwaukee, which has scored two runs in two games since a 20-0 victory at Pittsburgh on Thursday.
To make room for Lilly and bolster a leaky bullpen, Zambrano switched to a relief role this week after starting the season 1-2 with a 7.45 ERA in four starts. He was 100-58 as a full-time starter from 2003-09.
"We're a lot better now with him out there," Cubs slugger Aramis Ramirez said.
Zambrano came on to protect a 2-0 lead with two outs and runners on first and third in the seventh, replacing John Grabow. He entered to a standing ovation from the large number of Cubs fans in attendance -- and boos from the Brewers fans.
Zambrano threw two fastballs to Rickie Weeks, retiring him on a check-swing grounder to the mound and getting high-fives from his teammates as he returned to the dugout.
The Cubs added to their lead in the eighth, loading the bases with one out. Geovany Soto singled in a run to bring up Zambrano, a career .233 hitter with 20 home runs. He drove in Alfonso Soriano with a drive to the warning track in right. Ryan Theriot added an RBI single.
"We had some opportunities in the seventh and the eighth," Brewers manager Ken Macha said. "Zambrano was able to shut us down."
"He got loose easily out there, and as the inning progressed he threw the ball better and better," Piniella said. "Our bullpen was really too young, and then we had the injury to (Angel) Guzman and then the injury to [Esmailin] Caridad on top of that. We had to shore it up, and we felt that Carlos was the guy to do it. And I am convinced that he will be."
Milwaukee did not get anyone past second base against Lilly, who is looking to regain his All-Star form of 2009, when he went 12-9 with a 3.10 ERA.
"I had a couple erratic moments, but for the most part I was mixing it well," Lilly said. "I get excited with an opportunity like this. I tried not to show it too much, those emotions, but I was much more excited and anxious and maybe a little too geeked up."
Davis gave up two runs and six hits. The free-agent pickup was a disaster in his first three outings with the Brewers, giving up 15 earned runs and 24 hits in 12 innings (11.25 ERA).
Macha said Davis' outing was a "big boost" to the team.
"It's nice to know that I can get somebody out the second time around," Davis said. "I was able to command the fastball a little bit better, which helped my cutter, which helped my curveball as well. Who would've known?"
Marlon Byrd, who finished with three hits, had an RBI single in the third for the Cubs, and Ramirez had one in the sixth to snap an 0-for-21 skid.
Ramirez credited Lilly for his role in the victory.
"Lilly threw the ball well," Ramirez said. "He surprised me, first outing of the year, six shutout innings against a really good hitting team."
After the game, Zambrano got dressed and then walked away from the reporters waiting by his locker, saying, "You guys saw the game." He then returned to the locker room and declined to speak again. ... To make room for Lilly, Chicago optioned struggling RHP Jeff Samardzija to Triple-A Iowa. The reliever was 0-1 with an 18.90 ERA in four appearances. ... In his two minor league rehab outings before Saturday's start, Lilly went 1-0 with a 1.64 ERA, with 13 strikeouts and two walks in 11 innings. ... Byrd has 12 of his 14 RBIs this season with two outs. ... Brewers RHP Dave Bush, Sunday's starter, is 2-8 with a 5.01 ERA in his career against the Cubs.