It's what the ForEach construct does for a living.
Variable 2 has one or more objects; one at a time is taken and put into variable 1. That's literally what ForEach is doing, and that's how it happens. Nearly all programming languages have an equivalent construct.
Yes, absolutely. PowerShell doesn't assign any semantic meaning to variable names. You'd use $VM and $VMs because it helps you keep track, not because PowerShell cares. In fact, I use almost that exact explanation in [i]Learn PowerShell in a Month of Lunches,[/i] because thinking the plural vs. singular variable names are important is a huge hangup for a lot of beginners... in any programming language, not just PowerShell.
I thank all for the response. The problem with anything is doing and doing it more. I want to master powercli. I am learning quick that to do so requires mastering Powershell.
This is the first time I have been excited about learning Microsoft technology! Powershell is really the greatest thing that Microsoft has developed since WINXP. I really want to use powershell as a means to have a deeper understanding of the underlying windows technology.