Назад | Перейти на главную страницу

Сценарий тестирования Powershell возвращает ошибку «Термин '=' не распознается как имя командлета, функции, файла сценария или работающей программы»

Пользователи powershell! Если я запускаю powershell как оболочку и набираю команды одну за другой - все в порядке. Но если я помещаю команды в файл .ps1 и пытаюсь выполнить его, я получаю странную ошибку:

The term '=' is not recognized as the name of a cmdlet, function, script file, or operable program

тестовый сценарий, который я запускаю:

echo "$pw = 2" > ./test.ps1
echo '$pw' >> ./test.ps1
pwsh ./test.ps1

Я использую pwsh в linux (установлен с https://packages.microsoft.com/rhel/7/prod/) если это имеет значение.

пробовал использовать "$ pw = 2` - результат тот же.

Да, я знаю о длинной форме установки и получения переменной:

echo "set-variable -name 'pw' -value '2'" > ./test.ps1
echo "get-variable -name 'pw'" >> ./test.ps1
pwsh ./test.ps1

Оно работает. Но мне нужны более сложные сценарии, в которых практически невозможно использовать get-variable.

Помогите пожалуйста - что я делаю не так?

Вам нужно избежать $ знак доллара, обозначающий имя переменной.

# command                       # result
Set-StrictMode -Off             # uninitialized variables are assumed to have a value of 0 (zero) or $null
echo "$pw = 2"                  #  = 2
Set-StrictMode -Version Latest  # Selects the latest (most strict) version available
echo "$pw = 2"                  # throws an error: The variable '$pw' cannot be retrieved because it has not been set.
echo '$pw = 2'                  # $pw = 2       (used single quotes)
echo "`$pw = 2"                 # $pw = 2       (used backtick escape character)

редактировать приведенный выше пример был протестирован в Windows Powershell. Однако он работает с теми же результатами в WSL. Ubuntu оболочка, опуская все Set-StrictMode вещи и используя \ escape-символ обратной косой черты, как показано ниже:

# command                       # result
echo "$pw = 2"                  #  = 2
echo '$pw = 2'                  # $pw = 2       (used single quotes)
echo "\$pw = 2"                 # $pw = 2       (used backslash escape character)

Ссылка: