I think you’re probably using the wrong operator. First of all, does ChassisTypes contain one value, or an array of values? The docs suggest it’s an array of numbers. PowerShell doesn’t really contain an operator that will tell you “this array contains one or more values from this other array.” You could possibly hack something together with Compare-Object, but it’d be awkward.
You’re also using -and entirely wrong. The Boolean operator -and requires a complete comparison on either side of it; it does not mean “-andAlsoEqualTo,” which is how you’re trying to use it.
So to clarify: You want to see if ChassisTypes contains ALL of the values in EITHER list you’ve provided?
See? That should have been True, because $test_true DOES equal $list1, but PowerShell doesn’t see it that way. Also notice that this is the correct use of -or (as well as -and), with a comparison on either side.
You could maybe use Compare-Object. If there are NO differences between a reference list and your test list, then they’re the same.
If you’re happy to just know if it’s physical or virtual, then maybe take a look at win32_computersystem. I’m not certain what it is with VMware virtuals, but you’ll find the manufacturer property has Microsoft for Hyper V systems, and Xen for XenServer systems.