‘wmic’ не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл.

Вопрос или проблема

Мне нужно запустить этот скрипт, который я сделал. Этот пакет должен скопировать скомпилированную программу на STM32 Nucleo. Он использует wmic для поиска буквы виртуального диска Nucleo по его метке:

@echo off
for /f %%D in ('wmic volume get DriveLetter^, Label ^| find "NODE_F446RE"') do set nucleo_drive=%%D
IF EXIST %D%\DETAILS.TXT (
  IF EXIST main.bin (
    @echo on
    xcopy main.bin %D%
    @echo off
    echo Copied main.bin on nucleo
  ) ELSE (
    echo Binary not found. Run `mingw32-make` in this directory to compile the project.
  )
) ELSE (
  echo Nucleo drive not found. If needed, edit the `find "NODE_F446RE"` part of this script to refference your nucleo volume name.
)

Но я получаю эту ошибку:

'wmic' is not recognized as an internal or external command, operable program or batch file.

Я удостоверился, что служба Windows Management Instrumentation запущена. Что еще может быть неправильно?

WMIC устарел и отсутствует по умолчанию в Windows 11. Предпочтительно использовать командлет PowerShell Get-WmiObject, или, если нет необходимости использовать WMI, использовать специфические командлеты управления (например, Get-LocalUser).

На момент написания (23H2) WMIC все еще доступен как необязательная функция. В приложении “Настройки” перейдите в Система → Дополнительные функции и нажмите “Просмотр функций” в строке “Добавить дополнительную функцию”. Отметьте флажок для WMIC и продолжите установку.

Если функция уже установлена или вы используете более старую версию ОС, эта ошибка указывает на то, что директория утилиты wmic не найдена в вашем PATH. Откройте окно расширенных свойств системы (вы можете открыть страницу “Система” с помощью Windows+Pause/Break) и на вкладке “Дополнительно” нажмите “Переменные среды”. В секции системных переменных найдите PATH (или любую другую вариацию написания). Добавьте в нее следующую запись:

%SystemRoot%\System32\Wbem

Обратите внимание, что записи разделяются точкой с запятой.

Как сказал @DavidWheatley, wmic теперь удален, не только из последних версий для инсайдеров, но и из последних релизов.

Используя WMI команды PowerShell, информация, необходимая @TomášZato, доступна через:

Get-WmiObject -Class Win32_Volume | fl DriveLetter, Label

И вот как получить серийный номер BIOS, что я искал, когда нашел этот ответ:

Get-WmiObject -Class Win32_Bios | Select SerialNumber

Чтобы сократить набор текста, -Class можно опустить в обоих приведенных выше случаях; и команды, и члены данных не чувствительны к регистру, так что можно ввести все в нижнем регистре, например get-wmiobject win32_bios | select serialnumber.

Если вы используете Windows 11, Microsoft удалила WMIC из последних версий для инсайдеров.

Вместо этого теперь следует использовать команды PowerShell.

Чтобы перечислить все команды WMI PowerShell, вы можете выполнить Get-Command -Noun WMI*.

В моем случае, у меня уже стояла %SystemRoot%\System32\Wbem в пути, но недавно установленный драйвер устройства USB дополнительно добавил C:\Windows\System32 в конец моего пути, и это помешало Windows найти команду wmic. Когда я удалил завершающую C:\Windows\System32 из пути, wmic снова стал находиться.

Когда я использовал C:\Windows\System32 в пути, я получал такое же предупреждение при установке операционной системы Tails на USB-накопитель.

Когда я изменил это на: %SystemRoot%\System32\Wbem, все наладилось, и предупреждение исчезло.

Ответ или решение

Если вы сталкиваетесь с ошибкой "’wmic’ не является внутренней или внешней командой, исполняемой программой или пакетным файлом", это может быть связано с несколькими причинами, особенно если вы используете Windows 11.

Причина ошибки

  1. Отсутствие WMIC в Windows 11: Начиная с последних сборок Windows 11, Microsoft удалила утилиту WMIC по умолчанию. Это может вызывать ошибку, даже если WMI-сервис работает.

  2. Проблемы с переменной PATH: Если вы находитесь на более ранней версии Windows, проблема может возникнуть из-за отсутствия правильной настройки переменной PATH.

Решения

1. Использование PowerShell вместо WMIC

Вместо использования wmic, который уже устарел и не поддерживается в Windows 11, вы можете использовать командлеты PowerShell, такие как Get-WmiObject.

Пример команды для получения буквы и метки диска:

Get-WmiObject -Class Win32_Volume | Where-Object {$_.Label -eq "NODE_F446RE"} | Select-Object DriveLetter

Этот подход позволяет избежать использования устаревших инструментов и воспользоваться более современными возможностями PowerShell.

2. Настройка переменной PATH

Если вы используете более раннюю версию Windows, убедитесь, что путь к wmic.exe включен в переменную окружения PATH. Для этого:

  1. Перейдите в свойства системы (вы можете открыть их, нажав Windows + Pause/Break).
  2. В разделе "Дополнительно" выберите "Переменные среды".
  3. В системных переменных найдите PATH и добавьте %SystemRoot%\System32\Wbem.
  4. Убедитесь, что нет дублирующих записей, таких как C:\Windows\System32 в конце PATH.

Дополнительные рекомендации

  1. Модернизация кода: Поскольку WMIC устарел, рекомендуется переписать ваши сценарии на PowerShell. Это не только сделает ваш код более современным, но и обеспечит его совместимость с будущими версиями Windows.

  2. Документация и обновления: Регулярно проверяйте документацию Microsoft на предмет изменений в управлении системами и управлениями серверами Windows.

Заключение

Переход на использование PowerShell вместо WMIC является обязательным шагом для поддержания актуальности и надежности ваших сценариев. Тщательно проверьте системные переменные и обновите скрипты, чтобы избежать сбоев в работе, связанных с удалением устаревших инструментов.

Следуя этим проектам, вы значительно снизите риски появления подобных ошибок в будущем и оптимизируете автоматизацию в вашей работе с устройствами и системами Windows.

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

Капча загружается...