It was a second defeat in warm-up matches for the Sri Lankans, who reached the final of the last two World Cups and had hopes of a second title to go with their 1996 triumph.
Hamilton Masakadza, who scored a run-a-ball century and finished 117 not out, helped his side chase down a target of 280 and claim a morale-boosting victory.
All-rounder Masakadza has been playing international cricket for 14 years but has never before represented his country at a World Cup with injury and loss of form ruling him out of previous tournaments.
The 31-year-old reached his century with a single off spinner Rangana Herath in the 41st over of the innings before he ushered his country to victory with just under five overs to spare.
Sri Lanka won the toss and elected to bat but while plenty of their batsmen got starts, only Dimuth Karunaratne (58) and all-rounder Jeevan Mendis (51) managed to get to the half century mark and 279 for six was not an imposing score.
They will have to pick themselves up for a meeting with co-hosts New Zealand in Christchurch on Saturday in the opening match of the tournament.