Чтобы уточнить полезный ответ Герта Яна Краайевельда :
A param(...)
блок должен быть первым оператором в скрипте (или функции) для работы - со следующими ограниченными исключениями :
в v5 +, using
операторам может предшествовать - см. about_using
.
комментарии могут предшествовать этому,
- , который включает
#Requires
комментариев, которые требования к состоянию оценены / обеспечены до запуска сценария - см. about_Requires
Возможно, размещение любых других операторов перед param(...)
должно быть перехвачено во время разбора , но в PowerShell 7.0 ошибка возникает во время выполнения , что может привести к бесполезным сообщениям об ошибках:
Технически происходит то, что команда, ошибочно помещенная перед блоком param(...)
, изменяет интерпретацию последнего на рассмотрение param
имени команда (псевдоним, функция, сценарий или исполняемый файл) - которого обычно не существует.
Поскольку в вашем случае неуместная команда была вызовом Set-StrictMode
, аргументы к команде-не-команде были оценены первыми, а ссылка на несуществующую $windowHeight
(которая тогда не рассматривалась как переменная параметр ) вызвала строгую ошибка -режима, которую вы видели.
Если бы вы сначала поместили другую команду, неверная интерпретация param
как имени команды стала бы более очевидной:
The term 'param' is not recognized as the name of a cmdlet, function, script file, or operable program. [...]
Хотя это лучше, чем вводящая в заблуждение ошибка строгого режима, как указано, ошибка времени разбора с выделенным , специфицирующим c сообщение об ошибке будет намного лучше.