After being sent in to bat in Kingston on Saturday (Sunday AEST), Sri Lanka made a competitive 6-194 on the back of half-centuries from Kamil Mishara and Dasun Shanaka, who was named man of the match.
Sri Lanka's Wanindu Hasaranga and Dushmantha Chameera then took three wickets each to limit the hosts' reply to 157 at Sabina Park.
Mishara made an unbeaten 61 from 40 balls and shared a 101-run stand with Shanaka (58 off 24 balls) to form the backbone of Sri Lanka's innings.
Shamar Joseph took 3-32 off his four overs, including a searing yorker that bowled Dunith Wellalage with the final ball of the innings.
The home side's reply stuttered from the start, West Indies slumping to 2-9 in the early overs, before Shimron Hetmyer and Rovman Powell combined for an 82-run stand.
But the match turned decisively towards Sri Lanka in the 10th over.
First, Hetmyer (36 off 26) was run out chasing a tight single, then four balls later Powell, who hit a six off the final over to clinch victory for West Indies in the first match on Thursday, was caught at point off Maheesh Theekshana for 43 off 26 balls.
Hasaranga (3-38) then dismissed Sherfane Rutherford (14) and Romario Shepherd in consecutive balls in the 13th over to reduce the hosts to 6-108.
Chameera (3-9) had Roston Chase (17) caught on the boundary at the start of the 19th over to complete a routine victory.
Sri Lanka won the preceding - and soggy - three-match ODI series 1-0 after the final two matches were rained out. The tourists had won the first match of that series by 41 runs.
The final match of the T20 series is scheduled for Sunday (Monday AEST), also at Sabina Park in Kingston.