For a little more information, let's talk about the difference between Named (referred to as "Explicit" in the error output) and Positional parameters. Basically, when you call a cmdlet with arguments (such as "Copy-Item $file ..."), you're using what's called "Positional Parameters". Basically, this means that PowerShell knows which parameter to associate the argument to based on the position. In the case of "Copy-Item", the first parameter is "Path".

Anything in square braces, such as "[-Path]", are optional. Based on that, the parameter name for "-Path" is optional, but the argument itself is required. Destination is also a positional parameter, because the entire argument is optional, and the parameter name itself is optional even if you're using the argument ("[[-Destination] <String>]").

Named parameters explicitly include the name of the parameter before the argument ("-Path $file"). Because of this, they can be placed in any order you want, because PowerShell will always be able to attach the argument to the correct parameter.