Метка: PowerShell

  • Сброс настроек службы обновлений Windows Update

    Если служба обновлений Windows работает не корректно, обновления не загружаются или не устанавливаются, то самый простой и эффективней способ решить проблему со службой Windows Update – восстановить ее исходные настройки. В этой статье мы покажем, как сбросить конфигурацию агента и службы (далее…)

  • Автоматическая очистка логов IIS с помощью PowerShell

    Веб сервер IIS (Internet Information Services) в процессе работы генерирует довольно большое количество логов, которые пишутся в файлы журналов. Основная проблема в том, что по-умолчанию журналы IIS расположены на системном диске, и со временем файлы логов могут забить все доступное место на диске (далее…)

  • Измерение производительности и IOPS жестких дисков и СХД в Windows

    Одной из основных метрик, позволяющих оценить производительность существующей или проектируемой системы хранения данных является IOPS (Input/Output Operations Per Second — количество операций ввода/вывода). Говоря простым языком, IOPS – этой количество блоков, которое успевает считаться или (далее…)

  • Как принудительно завершить зависшую службу в Windows?

    Администраторы Windows могут столкнуться с ситуацией, когда при попытке остановить (запустить) какую-то службу из графической оснастки управления службами Services.msc , служба зависает в статусе Stopping (или Starting). При этом кнопки управления службой (Start, Stop, Restart) становятся (далее…)

  • Очистка занятых COM портов в Windows

    Когда вы подключаете к компьютеру новое COM или некоторые USB устройства (например, USB модем, мобильный телефон, Bluetooth адаптер, конвертеров последовательных портов в USB и т.п.), Windows определяет его через механизм Plug-n-Play и назначит ему номер COM порта в диапазоне от 1 до 255 (COM1, COM2, COM3 и т.д.). При повторном подключении этого же устройств, ему назначается номер COM порта (Communication Port, или Serial port), зарезервированный за ним ранее. Новым устройствам выдается первый незанятый номер COM порта. Не редкость, когда внешние устройства при подключении создают сразу несколько COM портов (в моем случае после подключения адаптера Bluetooth, в системе появилось сразу 10 !!!! новых COM портов).

    Ряд приложений (как правило, довольно древних), способны адресовать только двухзначные номера COM портов, и отказываются работать с COM100 и выше. Или видят только COM1-COM9 устройства. Что делать, если подключенное устройство получило высокий номер COM порта? Можно ли сбросить нумерацию для зарезервированных COM портов и удалить назначенные порты?

    Изменить номер COM порта устройства в Windows

    В Windows можно вручную изменить номер COM порта, назначенный устройству. Предположим требуемый COM порт уже занят, и мы хотим его попробовать его освободить. Для этого:

    1. Откройте диспетчер устройств (Device Manager) командой devmgmt.msc;
    2. В меню выберите View->Show Hidden Devices;
    3. Затем разверните Ports (COM & LPT) и найдите в списке устройство;
    4. Перейдите на вкладку Port Settings и нажмите кнопку Advanced;
    5. Текущий номер COM порта, назначенный устройству указан в поле COM Port Number;
    6. Чтобы изменить его, раскройте выпадающий список и выберите номер COMпорта, который хотите задать.

    Но чаще всего изменить номер COM порт на другой не получится, так как все «низкие» COM порт уже используются (in use);

    1. В этом случае нужно попробовать удалить резервацию COM порта за другим устройством. В ветке Ports (COM & LPT) найдите которому назначен нужный вам номер COM порта (бледная иконка означает, что данный COM порт назначен, но в сейчас это устройство не подключено);
    2. Щелкните по нему ПКМ и выберите Uninstall;
    3. Теперь вы можете назначить освобожденный COM порт другому устройству. Еще раз откройте свойства вашего устройство, перейдите на вкладку Port Settings -> Advanced. Задайте свободный номер COM порта для вашего устройства.

    Однако такой способ позволяет освободить занятый COM порт не во всех случаях.

    Вы можете вывести полный список занятых COM портов в Windows с помощью PowerShell:

    Get-WMIObject Win32_SerialPort | Select-Object Name,DeviceID,Description
    Можно определить номер COM порта для определённого устройства по его имени, например:
    Get-WMIObject Win32_SerialPort | Where-Object { $_.Name -like "*Arduino*"}|select name, deviceid
    Или
    Get-WMIObject Win32_SerialPort | Where-Object { $_.Name -like "*GPS*"}|select name, deviceid

    Определяем процесс, который использует COM в Windows

    Вы не сможете освободить COM порт устройства, которое используется Windows или запущенной программой, процессом. Сначала вам нужно завершить процесс/программу, которая использует сейчас COM порт. Чтобы определить имя процесса, который использует COM порт понадобится утилита Process Explorer (https://docs.microsoft.com/en-gb/sysinternals/downloads/process-explorer).

    Сначала нужно вывести имя службы, которая использует COM порт. Выполните команду PowerShell:

    get-pnpdevice -class Ports -ea 0| Select Name, PNPDeviceID, Status, Service

    Имя службы данного COM порта указано в столбце Service. Например, для COM2 это Serial. Теперь нужно запустить Process Explorer с правами администратора и выбрать в меню Find -> Find Handle or DLL. В строке Hangde or DLL substring введите значение Service, полученное ранее. В нашем примере это Serial .

    Process Explorer должен показать процесс, который использует сейчас ваш COM порт. Чтобы освободить COM порт, завершите процесс или программу.

    Сброс назначенных COM портов Windows через реестр

    Информация об используемых COM портах хранится в ключе реестра CommDB в разделе HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCOM Name Arbiter

    1. Откройте редактор реестра (regedit.exe) и перейдите в указанную ветку.
      Важно! Настоятельно рекомендуем предварительно создать резервную копию данной ветки реестра (File -> Export). В том случае, если что-то пойдет не так, вы сможете вернуться к первоначальной конфигурации COM портов.

    2. Значение параметра ComDB в двоичном формате определяет список COM портов, зарезервированных в системе. Каждый бит определяет состояние соответствующего порта (от 1 до 255). К примеру, если нам нужно оставить резервацию только для COM3, hex значение ComDB будет равно 04 (0000 0100);
      Важно! Будьте предельно внимательными, ни в коем случае не добавьте в этот параметр дополнительные байт, иначе система может начать падать в BSOD.
    3. Если нужно полностью сбросить все привязки COM, измените значение ключа ComDB на 0.
      Примечание. В разделе HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM можно увидеть полный список COM портов, доступных в Windows.В разделе HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPSERIALCOMM можно увидеться список COM портов, подключенных к системе.
    4. В ветке HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionPorts содержится список назначенных COM портов. Все ненужные порты можно удалить (в нашем примере мы оставим только COM3 и удалим остальные);
    5. Отключите все оборудование и перезагрузите Windows;
    6. После перезагрузки включите оборудование в нужном порядке (переустановите конверторы USB-to-serial и т.д.). Все обнаруженные COM-порты автоматически определяться системой и им будут последовательно выделены номера COM портов.

    Также вы можете использовать следующие две бесплатные утилиты для очистки занятых (In Use) COM портов:

    • COM Name Arbiter Tool – утилита для освобождения занятых COM портов. Запустите утилиту с правами администратора, выберите COM порты, которые вы хотите освободить и нажмите Clear unused Reservations и Remove non-present devices;
    • Device Cleanup Tool – утилита используется для поиска в реестре информации о ранее подключенных устройств (в ветке HKEY_LOCAL_MACHINESYSTEMCurrentControlSetEnum) и удаления неиспользуемых устройств и очистки резерваций COM портов.


  • Как предоставить обычным пользователям права на запуск/остановку служб Windows?

    По умолчанию обычные пользователи (без прав администратора) не могут управлять системными службами Windows. Это означает, что пользовали не могут остановить, запустить (перезапустить), изменить настройки и разрешения служб Windows. В этой статье мы покажем, как настроить правами на службы Windows. (далее…)

  • Автоматическое переподключение к VPN при разрыве соединения в Windows

    Встроенный VPN клиент Windows в случае разрыва подключения по-умолчанию не пытается переподключиться к VPN серверу. В этом случае пользователю приходится вручную подключаться к VPN. В Windows есть несколько инструментов, которые позволят настроить автоматическое переподключение к VPN после потери (далее…)

  • Запуск PowerShell скрипта при возникновении определенного события

    Мне пришлось столкнуться с необходимостью запускать PowerShell скрипты при возникновении определенного события (Windows Event) при организации DHCP failover. Однако, думаю, что применений может быть масса. Покопался в сети и нашел статью под названием Trigger a PowerShell Script from a Windows (далее…)

  • Как создать самоподписанный SSL сертификат в Windows?

    Большинству администраторов Windows, знакомых с темой PKI, известна утилита MakeCert.exe, с помощью которой можно создать самоподписанный сертификат. Эта утилита включена в состав Microsoft .NET Framework SDK и Microsoft Windows SDK. В современных версиях Windows 11/10/8.1 и Windows Server (далее…)

  • PowerShell: используем BITS для копирования (скачивания) больших файлов

    Если вам нужно скачать (передать) большой файл на удаленный компьютер, не нагружая канал передачи данных, рекомендуем воспользоваться протоколом BITS. BITS (Background Intelligent Transfer service) – это встроенная служба Windows для передачи файлов между компьютерами, которая поддерживает (далее…)