Полезные советы

Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы — решения

Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы — решения

При попытке выполнить те или иные команды в Windows 11/10, часто по инструкциям в Интернете, в том числе и с этого сайта, некоторые пользователи получают сообщения об ошибках вида: «Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы» с предложением проверить правильность написания имени и пути.

В этой инструкции подробно о том, почему такое может происходить и варианты решения, если вы столкнулись с рассматриваемой ошибкой. Схожая ошибка, но в командной строке: Не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

Windows PowerShell и Командная строка работают по-разному

Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы — решения

Одна из самых частых причин рассматриваемой ошибки у начинающих пользователей — ввод команды для командной строки (cmd.exe) в окно Windows PowerShell (открывается по умолчанию в «Терминале Windows») без учёта отличий синтаксиса и обработки команд.

Команда, исправно работающая в обычной командной строке, может сообщить «Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы» или других ошибках, например, «Недопустимая команда» установки или удаления в bcdedit.

Несколько примеров, когда это может происходить:

  • Изменение разрешений папки или файла, например:
    icacls "C:remontka" /grant Администраторы:(OI)(CI)F

    В командной строке всё сработает, а PowerShell, обнаружив открывающую скобку, будет ожидать начало команды. Результат — сообщение о том, что имя OI не было распознано.

    Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы — решения

  • Простой запуск программы или скрипта из текущей папки. Например, вы находитесь в папке с исполняемым файлом программы в консоли PowerShell и вводите program.exe — сообщение об ошибке будет тем же самым, в отличие от командной строки PowerShell не загружает таким образом программы из текущей рабочей папки.

    Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы — решения

  • Попытка запуска программы без указания пути, путь которой отсутствует в переменной среды PATH, часто — у новичков, использующих Python.
  • Запуск программы с указанием полного пути при условии, что путь содержит пробелы, например:
    C:Program FilesAppapp.exe

    Если не взять путь в кавычки, вы увидите рассматриваемое сообщение об ошибке, если же использовать кавычки — произойдёт простой вывод взятого в кавычки текста в следующей строке.

    Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы — решения

  • Символ & (амперсанд) в путях к папкам или аргументах. PowerShell «воспринимает» этот символ как оператор вызова или разделитель команд (в новых версиях). В зависимости от версии PowerShell может сообщать о другой ошибке — «Амперсанд не разрешен. Оператор зарезервирован для будущих версий».

Выше приведены лишь некоторые примеры, при этом первый случай возможен для множества других исправно работающих в cmd.exe команд, если они содержат:

  • Круглые скобки ()
  • Фигурные скобки {}
  • Аперсанды &
  • Запятые ,
  • Точки с запятой ;
Читайте также:  Не удалось инициализировать драйвер этого устройства (Код 37) — причины и решения

Дополнительно следует учитывать, что ошибки при наборе команд или в источнике, откуда они были скопированы, также могут приводить к рассматриваемой ошибке.

Другие команды командной строки могут не сообщать о рассматриваемой ошибке, но работать неправильно, несколько примеров (работоспособность части из них зависит также от версии PowerShell):

sc query wuauserv sc delete MyService curl -I http://google.com set MY_ENV=production && echo %MY_ENV%

Причины — в используемых в PowerShell алиасах (псевдонимах), например, при вводе sc вызывается Set-Content, при вводе setSet-Variable, а для curlInvoke-WebRequest с отличающимся назначением, набором аргументов и способом их обработки.

Варианты решения

Теперь по порядку о способах исправить ситуацию и выполнить нужные команды без появления ошибки «Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы»:

  1. Для команд из сторонних инструкций, где прямо указано, что они предназначены для командной строки: запустите командную строку от имени администратора (если требуется) и используйте команды в ней. В Терминале Windows вы можете использовать кнопку справа от кнопки создания новой вкладки и выбрать пункт «Командная строка».
  2. Для запуска исполняемого файла из текущей папки используйте . перед вызываемым файлом, например:
    .program.exe
  3. Для команд python, pip и других — добавьте их расположение в системную переменную PATH вручную или во время установки (при наличии отметки в установщике).
  4. Для команд, содержащих перечисленные выше символы (скобки и другие) в передаваемых атрибутах — возьмите эти атрибуты в кавычки, чтобы они обрабатывались как строка, пример:
    icacls "C:remontka" /grant 'Администраторы:(OI)(CI)F'
  5. Для таких команд как sc (являющихся псевдонимами для команд и функций PowerShell) указывайте расширение, например, sc.exe
  6. Для запуска программы, содержащей в пути пробелы или используемые в PowerShell специальные символы можно использовать следующий синтаксис:
    & "C:Program FilesAppapp.exe"
  7. Для команд, содержащих символы экранирования из cmd ( или ^) — убрать соответствующие символы экранирования и взять строку в кавычки (одинарные, если внутри используются двойные), работает для новых версий PowerShell. Пример:
    docker run -e 'MY_CONFIG={"host": "remontka.pro"}' my-image
  8. Ещё одна возможность, которая может пригодиться при передаче аргументов — отключение парсинга с помощью токена «—%», все следующие за ним аргументы не будут обрабатываться PowerShell и будут считаться строкой. Пример:
    icacls --% C:Test /grant User:(F)

Надеюсь, я смог прояснить происходящее и помочь разобраться. Если же вопросы по теме остаются, вы можете задать их в комментариях ниже, я постараюсь подсказать решение.

Источник

Вам также может понравиться...

Добавить комментарий