Preston North End 0 West Bromwich Albion 2
In the seventh minute Jonathan Greening was fouled by Graham Alexander and took the free-kick himself, forcing a good save from Preston goalkeeper Andy Lonergan.
Two minutes later Lonergan denied Zoltan Gera as the visitors started brightly.
In the 13th minute Chris Sedgwick's 25-yard right-foot volley looped over the bar after Paul McKenna's cross had been punched clear by Russell Hoult.
Albion boss Bryan Robson had to substitute Geoff Horsfield for Rob Hulse in the 18th minute because of an injury to the former Fulham star.
Just before half-time Martin Albrechtsen crossed for Hulse to head just wide of the right-hand post.
Albion remained on top at the start of the season half and Darren Purse's free- kick set up Hulse in the 51st minute but Lonergan saved the substitute's effort with his legs.
Earnshaw put the ball in the back of the net four minutes later but was ruled to be offside.
When Preston hit back, Eddie Lewis set up Rob Kozluk, on loan from Sheffield United, but his 20-yard shot flew over the left-hand corner of the net.
Earnshaw had a shot cleared off the line by Kozluk before Greening was replaced by Jason Koumas.
It was from Koumas' 76th minute left-wing cross that Albion took the lead when Earnshaw flicked the ball home.
Hulse was booked for dissent with ten minutes to go and then a long ball by Russell Hoult found Earnshaw who scored his second goal of the match with a ten-yard chip over Lonergan.
Preston's first effort on target came with four minutes to go, a header by substitute Mark Jackson that went straight to Hoult.