Как вы обнаружили , в вашем конкретном случае проблема была обычно мягкой ошибкой, которая возникла из-за вызывающего , включающего строгий режим.Тем не менее, проблема является фундаментальной, как описано ниже.
Основная проблема заключается в том, что, начиная с v6.2, строгий режим PowerShell динамически ограничен,не лексически .
Это означает, что использование Set-StrictMode
влияет не только на функцию или скрипт, в котором она называется , но также другие функции и скрипты, вызываемые из той функции или сценария , которые живут в одном и том же домене области , то есть если и вызывающий, и вызываемый абоненты определены вне модуля или определено в том же модуле.
Другими словами: Сценарий или функция может невольно наследовать настройку строгого режимаи может сломаться , если он не предназначен для этого режима.
Например, вызываемый абонент может предположить, что строгий режим установлен по умолчанию, -Off
, иполагаться (свободно) на тестирование несуществования переменной $var
с if (-not $var)
, например.Если для вызывающего абонента в том же домене области установлено значение Set-StrictMode -Version 1
или выше, вызываемый абонент прервет.
Обходные пути :
Перспективы на будущее :
В этом RFC предлагается ввести лексически строгий режим, чтобы избежать проблем с текущим поведением.