All combinations assuming independence

ps=Times @@@ Tuples[Transpose[{#, 1 - #}]] &;

Usage example:

p={a,b,c,d}
ps@p

{a b c d,a b c (1-d),a b (1-c) d,a b (1-c) (1-d),a (1-b) c d,a (1-b) c (1-d),a (1-b) (1-c) d,a (1-b) (1-c) (1-d),(1-a) b c d,(1-a) b c (1-d),(1-a) b (1-c) d,(1-a) b (1-c) (1-d),(1-a) (1-b) c d,(1-a) (1-b) c (1-d),(1-a) (1-b) (1-c) d,(1-a) (1-b) (1-c) (1-d)}


Depending on how you want to define p:

p=.;
n = 3;
out = # /. List -> Times & /@ Tuples[Table[{p[i], 1 - p[i]}, {i, n}]]
(* {p[1] p[2] p[3], p[1] p[2] (1 - p[3]), p[1] (1 - p[2]) p[3], p[1] (1 - p[2]) (1 - p[3]), 
    (1 - p[1]) p[2] p[3], (1 - p[1]) p[2] (1 - p[3]), (1 - p[1]) (1 - p[2]) p[3],
    (1 - p[1]) (1 - p[2]) (1 - p[3])} *)

or

p=.;
n = 3;
p = Table[ToExpression["p" <> ToString[i]], {i, n}]
out = # /. List -> Times & /@ Tuples[Table[{p[[i]], 1 - p[[i]]}, {i, n}]] 
(* {p1 p2 p3, p1 p2 (1 - p3), p1 (1 - p2) p3, p1 (1 - p2) (1 - p3), (1 - p1) p2 p3,
   (1 - p1) p2 (1 - p3), (1 - p1) (1 - p2) p3, (1 - p1) (1 - p2) (1 - p3)} *)

probs = PDF[ProductDistribution @@ Map[BernoulliDistribution] @ #] /@ 
    Tuples[{1, 0}, Length@#] &;

probs[{a, b, c, d}] // Column

enter image description here

Also

bmterms = Table[BooleanMinterms[{i}, #], {i, 2^Length@# - 1, 0, -1}] /.
    {And -> Times, Not -> (1 - # &)} &;

bmterms[{a, b, c, d}] == probs[{a, b, c, d}]
True