(So, please use the PowerShell Q&A forum – gets more attention; this forum is intended for site feedback)
All parameters take the form:
-ParameterName <ValueType>
Except switch parameters, which don’t have a value type of course.
[-ParameterName] <ValueType>
is a mandatory positional parameter. That’s what -LogName is on Get-EventLog. Mandatory, because the ENTIRE PARAMETER (including its value) isn’t in square brackets. Positional, because the PARAMETER NAME ONLY is in square brackets.
The book is accurate. While -LogName’s PARAMETER NAME is indeed in square brackets, that does not constitute the ENTIRE PARAMETER. Maybe that’s the part that’s confusing? A parameter is not just its name; it’s also the corresponding value. Unless it’s a simple switch. Just one of those things you have to get used to.
By contrast:
[-ParameterName <ValueType>]
is an optional parameter. The entire thing is in [brackets].
[[-ParameterName] <ValueType>]
is an optional, positional parameter. That is, you don’t HAVE to specify the parameter at all. However, if you do, you can omit the parameter name provided you put the corresponding value in the correct position.
If it helps, use the full help (Help Get-EventLog -Full), since the individual parameter documentation makes the whole positional/mandatory thing much clearer.