百善鎮(zhèn)鎮(zhèn)域上東廓、下東廓兩村之西在西漢元封元年(前110年)是上谷郡昌平縣治所。
民國(guó)三十七年(1948年)12月12日,屬昌順聯(lián)合縣第十區(qū)。
1949年8月,屬昌平縣第三區(qū)。
1950年2月,分屬昌平縣二區(qū)、四區(qū),各自然村建村政府。
1953年7月,村政府撤銷建鄉(xiāng),百善鄉(xiāng)轄百善、孟祖2村,獅子營(yíng)鄉(xiāng)轄良各莊、泥洼、鐘營(yíng)、獅子營(yíng)4村,牛房圈鄉(xiāng)轄呂各莊、半壁街、二德莊、牛房圈4村,屬四區(qū)。
上東郭、下東郭2村屬辛立屯鄉(xiāng),東沙屯屬王莊鄉(xiāng),屬二區(qū)。
1956年2月,百善、獅子營(yíng)、牛房圈3鄉(xiāng)合并為百善鄉(xiāng)。
東沙屯、上東郭、下東郭屬松蘭堡鄉(xiāng)。
1958年,屬紅旗人民公社又屬小湯山公社,各鄉(xiāng)稱工作站。
1960年1月,屬昌平縣。
1961年5月,成立百善人民公社。
1982年7月,百善公社改鄉(xiāng)。
1997年,撤鄉(xiāng)改鎮(zhèn),轄現(xiàn)域。