
При попытке выполнить те или иные команды в 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 команд, если они содержат:
- Круглые скобки ()
- Фигурные скобки {}
- Аперсанды &
- Запятые ,
- Точки с запятой ;
Дополнительно следует учитывать, что ошибки при наборе команд или в источнике, откуда они были скопированы, также могут приводить к рассматриваемой ошибке.
Другие команды командной строки могут не сообщать о рассматриваемой ошибке, но работать неправильно, несколько примеров (работоспособность части из них зависит также от версии PowerShell):
sc query wuauserv sc delete MyService curl -I http://google.com set MY_ENV=production && echo %MY_ENV%
Причины — в используемых в PowerShell алиасах (псевдонимах), например, при вводе sc вызывается Set-Content, при вводе set — Set-Variable, а для curl — Invoke-WebRequest с отличающимся назначением, набором аргументов и способом их обработки.
Варианты решения
Теперь по порядку о способах исправить ситуацию и выполнить нужные команды без появления ошибки «Имя не распознано как имя командлета, функции, файла сценария или выполняемой программы»:
- Для команд из сторонних инструкций, где прямо указано, что они предназначены для командной строки: запустите командную строку от имени администратора (если требуется) и используйте команды в ней. В Терминале Windows вы можете использовать кнопку справа от кнопки создания новой вкладки и выбрать пункт «Командная строка».
- Для запуска исполняемого файла из текущей папки используйте . перед вызываемым файлом, например:
.program.exe
- Для команд python, pip и других — добавьте их расположение в системную переменную PATH вручную или во время установки (при наличии отметки в установщике).
- Для команд, содержащих перечисленные выше символы (скобки и другие) в передаваемых атрибутах — возьмите эти атрибуты в кавычки, чтобы они обрабатывались как строка, пример:
icacls "C:remontka" /grant 'Администраторы:(OI)(CI)F'
- Для таких команд как sc (являющихся псевдонимами для команд и функций PowerShell) указывайте расширение, например, sc.exe
- Для запуска программы, содержащей в пути пробелы или используемые в PowerShell специальные символы можно использовать следующий синтаксис:
& "C:Program FilesAppapp.exe"
- Для команд, содержащих символы экранирования из cmd ( или ^) — убрать соответствующие символы экранирования и взять строку в кавычки (одинарные, если внутри используются двойные), работает для новых версий PowerShell. Пример:
docker run -e 'MY_CONFIG={"host": "remontka.pro"}' my-image - Ещё одна возможность, которая может пригодиться при передаче аргументов — отключение парсинга с помощью токена «—%», все следующие за ним аргументы не будут обрабатываться PowerShell и будут считаться строкой. Пример:
icacls --% C:Test /grant User:(F)
Надеюсь, я смог прояснить происходящее и помочь разобраться. Если же вопросы по теме остаются, вы можете задать их в комментариях ниже, я постараюсь подсказать решение.