McPherson enlisted in the Army in 1972, and served three years as a military policeman, before leaving the Army for college.[7] In 1979 he was commissioned as an ensign in the Judge Advocate General's Corps of the Naval Reserve. He interned in the Naval Legal Service Office (NLSO) in San Diego and then attended Naval Justice School, in Newport, R.I., completing his training in 1982. He served as a judge advocate and trial counsel at several Navy commands and ships before and after completing his graduate training in 1991. In June 1994, he reported to the staff of Commander, Submarine Force, U.S. Atlantic Fleet as the Force Judge Advocate. In December 1995, he joined the staff of the Vice Chief of Naval Operations as the Assistant for Legal and Legislative Matters. In October 1997, he became Special Counsel to the Chief of Naval Operations. In September 2000, he assumed command of Trial Service Office East, Norfolk, Va. In October 2002, he was promoted to rear admiral and assigned as the Deputy Judge Advocate General of the Navy and Commander of Naval Legal Service Command. On November 10, 2004, McPherson became the 39th Judge Advocate General of the Navy, a position he held until 2006.[8]
McPherson has served as the executive director of the National Association of Attorneys General. He also served as the general counsel of the Department of Defense Counterintelligence Field Activity.
On December 5, 2019, Trump nominated him to be Under Secretary of the Army, a position that he had been holding since July 23, 2019, in an acting capacity, while concurrently serving as General Counsel of the Army.[11] He was sworn in on March 25, 2020, after being confirmed by the Senate.[3] Defense Secretary Mark Esper designated McPherson as Acting Secretary of the Navy on April 7, replacing Thomas Modly who resigned the same day.[5] In relation to the 2020 coronavirus pandemic on USS Theodore Roosevelt McPherson and Chief of Naval Operations, AdmiralMichael M. Gilday recommended that Brett Crozier be reinstated as the commanding officer of the Roosevelt on April 25, 2020.[12]