魏明帝景初二年(戊午,公元238年)春季,正月,明帝從長安召回司馬懿,命他率軍四萬人討伐遼東。參預謀議的大臣有的認為四萬兵員太多,軍費難以提供。明帝說︰「四千里遠征討伐,雖說要出奇制勝,但也應當依靠實力,不應斤斤計較軍費。」明帝對司馬懿說︰「公孫淵放棄守城先行逃走,是上策;據守遼東抗拒大軍,是中策;如死守襄平,必被生擒。」明帝說︰「那麼,三者中他將采用哪一種?」回答說︰「只有明智的人,才能審慎度量敵我雙方的力量,才會預先有所舍棄。這既不是公孫淵的才智所能達到的,他又會認為我軍是孤軍遠征,不能支持長久,一定是先在遼水抗拒,然後退守襄平。」明帝說︰「往返需多少天?」回答說︰「進軍一百天,攻戰一百天,返回一百天,以六十天作為休息日,這樣的話,一年足夠了。」
公孫淵听到消息,再次源遣使節稱臣,向吳國求救。吳國打算殺掉來使,羊說︰「不可,這是發泄匹夫一時怒氣,而破壞稱霸稱王的大計,不如就勢厚待他,然後派遣奇兵暗中前往,以脅迫公孫淵歸附。如果魏討伐不能取勝,而我軍遠赴救難,便與遠方夷族結下恩情,大義表現于萬里之外。如果雙方交戰難解難分,遼東前方、後方分隔,那麼我們就在它邊陲郡縣,驅逐劫掠而歸,也足以表達上天的懲罰,對往事報仇雪恨了。」吳王說︰「好!」于是大規模地集結部隊,並對公孫淵來使說︰「請回去等候音信,我們遵從來函吩咐,一定和老弟休戚與共!」又說︰「司馬懿所向無敵,我深為老弟擔憂。」
明帝向護軍將軍蔣濟問道︰「孫權會救援遼東嗎?」蔣濟說︰「孫權知道我們戒備嚴密,不可能從中漁利,援軍深入則力所不及,不深入勢必徒勞無功;即使是兒子、兄弟處于那種危險境地,孫權都不會出動,何況是異域他國之人,加之以前還被羞辱過。如今所以向外宣揚出兵救遼,不過是欺騙遼東來使,使我們產生疑懼,一旦我們不能攻克,希望公孫淵向他臣服而已。可是沓渚縣離公孫淵所在地相距還遠,如果大軍受到阻礙,相持不下,戰斗不能速決,那麼孫權的臨時決策,或者輕兵突襲,就不可預料了。」
明帝問吏部尚書盧毓說︰「誰可以擔任司徒?」盧毓推薦處士管寧,明帝不采用,又問其次的人選,盧毓答道︰「敦厚忠誠的是太中大夫韓暨,耿直高潔的是司隸校尉崔林,忠貞純樸的是太常常林。」二月,癸卯(十一日),任命韓暨擔任司徒。
六月,司馬懿大軍到達遼東,公孫淵命大將軍卑衍、楊祚統率步、騎兵數萬人駐扎在遼隧,圍城挖掘了長達二十余里的壕溝。魏軍將領們想要攻城,司馬懿說︰「敵人所以堅守壁壘不肯決戰,是打算拖死我軍,現在攻打他們,正中其計。而且敵人主力在此,他們的老巢必定空虛,我軍直指襄平,必能攻破。」于是,打出許多戰旗,佯作要向南方出動,卑衍等率全部精銳部隊隨之向南。司馬懿率軍暗中渡過遼河,向北挺進,直撲襄平。卑衍等大為驚恐,率軍連夜撤回。魏各路大軍進抵首山,公孫淵再命卑衍等迎戰。司馬懿迎擊,大敗卑衍,遂進軍包圍襄平。
秋季,七月,連降大雨,遼河暴漲,運糧船隊從遼口直抵城下。大雨下了一個多月不停,平地水深數尺,魏三軍恐懼,打算遷移營壘,司馬懿下令軍中︰「有敢說遷營者斬!」都督令史張靜違抗命令,被斬,軍心這才安定。敵人依仗水勢,砍柴放牧依然如故,將領們想要俘獲他們,司馬懿都不準許。司馬陳說︰「從前攻打上庸,八支部隊同時進發,日夜不停,所以能用十六天時間攻下堅城,斬殺孟達。這次遠征而來,反而更安閑遲緩,我私下感到疑惑。」司馬懿說︰「孟達兵少但存糧可支撐一年,我軍將士四倍于孟達,但糧食不能支持一個月。以一個月攻打一年,怎麼可以不快速?以四個兵士攻擊一個敵人,即使喪失一半而能夠攻克,都應當去做,所以不顧死傷地強攻,是與糧食競爭啊!如今敵眾我寡,敵饑我飽,何況雨水如此之大,功力不能施展,雖然應當速戰速決,又能干什麼呢?自打從京師出發,不擔心敵人進攻,只恐怕敵人逃走。如今敵人糧食就要耗盡,可是我們的包圍還沒完成,搶掠他們的牛馬,抄襲他們的樵夫,這是故意*迫他們逃走。用兵是一種詭詐的行為,要善于隨機應變。敵人憑仗人多,倚仗雨大,雖然饑餓窘困,還不肯束手投降,應當顯示出我們無能以便使他們安心。如果因貪圖小利使他們驚嚇逃跑,這不是好的計策。」朝中听說大軍遇雨,一致打算退兵。明帝說︰「司馬懿有能力臨危控制事變,捉住公孫淵指日可待。」
雨止,司馬懿隨即合攏包圍圈,高堆土山,深挖地道,用干、櫓車、鉤梯、沖車,日夜攻城,射箭與石密集如雨。公孫淵窘迫危急,糧食已盡,以至人與人互相格殺殘食,死亡極多,部將楊祚等投降。八月,公孫淵派遣相國王建、御史大夫柳甫請求解圍退兵,如果同意,君臣定當自縛面降。司馬懿命斬來使,用檄文通知公孫淵說︰「楚國和鄭國地位相等,可是鄭伯還光著脊背牽羊出城迎降。我是天子的上公,而王建等想要我解圍後退,難道不失禮嗎?這二個老糊涂,傳話失去意指,已被我殺掉。如還有請降之意,就另派年輕有明快決斷的人前來。」公孫淵又派侍中衛演,請求指定日期,派送人質。司馬懿對衛演說︰「軍事大要有五條,能戰則戰,不能戰就當堅守,不能堅守就當逃走。剩下的兩條路,就只有投降和死了。公孫淵不肯自縛面降,這是決心去死,不必送來人質!」壬午(疑誤),襄平城敗潰,公孫淵和兒子公孫帶領數百騎兵從東南突圍逃走,魏軍急忙追擊,在梁水岸邊斬殺了公孫淵父子。司馬懿既已進入襄平城;誅殺城中公卿以下官吏及兵民七千余人,積尸封土,築成大墳,遼東、帶方、樂浪、玄菟四郡全部平定。
公孫淵將要反叛時,將軍綸直、賈範等苦苦勸阻,都被公孫淵誅殺。司馬懿于是堆土加高綸直等人的墳墓,顯揚他們的子弟,釋放了為朝廷所立而被公孫淵囚禁的叔父。中原人想要返回故里,听任自便。然後班師。
最初,公孫淵的哥哥公孫晃作為公孫恭的人質住在洛陽,公孫淵還未反叛時,公孫晃幾次報告公孫淵的變故,打算讓魏出兵討伐。到公孫淵圖謀叛逆,明帝不忍心把公孫晃在街市斬首,打算下獄處決。廷尉高柔上書說︰「我私下听說公孫晃以前多次自動歸附,報告公孫淵已萌生禍心,他雖然是凶犯宗族,但是推究其本心,是可以寬恕的。從前,孔丘曾經明察司馬牛的憂慮,祁奚曾經指明叔向沒有過失,這都是古代的美好義行。我認為公孫晃確實在先前有過舉報,應免他一死;如果他本來沒有告發,應應當在街市上斬首示眾。如今是進不赦免其性命,退又不公開其罪狀,只是緊閉獄門,命他自殺,天下各地,或許會懷疑我們的做法。」明帝不采納,竟派遣使節帶著攙有金屑的酒讓公孫晃和他的妻子兒女飲下,然後賞賜棺木喪衣,埋葬在公孫晃的住宅。