Add butter and onion to the pan and saute until the onion is softened.
Stir in flour until everything is well combined and no dry bits of flour remain. Cook and stir for one minute until bubbly.
Add chicken broth a little at a time to the flour mixutre, stirring and scraping the pan constantly. Cook until mixture begins to thicken and takes on the consistency of a sauce. Stir in half and half and lemon zest. Season with salt and pepper. Remove from heat.
Drain the asparagus and pat dry with paper towels.
Add the pasta and parmesan cheese to the sauce mixture and toss well to combine. Stir in the asparagus, mushrooms, sun-dried tomatoes, ham to the pasta and heat through over medium heat. Stir in the basil and parsley just before serving.
Use remaining parmesan as a garnish, served on the side.