You should really look into the Try/Catch construct for error handling; what you’re doing is nonstandard and a bit harder to follow.
But you’re always going to be outputting an object with a full set of properties, because that’s what your Select-Object is selecting. With a failed computer, you’re asking it to select properties that don’t exist (WMI_OS and the rest), and so it creates empty properties with those names.
That’s not what you want? Or am I not understanding the question?