Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Проверка по списку

Ответить
Настройки темы
CMD/BAT - Проверка по списку

Новый участник


Сообщения: 33
Благодарности: 3

Профиль | Отправить PM | Цитировать


Изображения
Тип файла: png Screen-465.png
(17.9 Kb, 1 просмотров)
Привет. Есть команда DISM /Online /Get-Capabilities /Format:Table | find /i "Установлен"
Выводит компоненты установленные на ПК


Есть лист (список) компонентов (ниже в коде)
Задача - по списку прогнать компоненты этой командой и занести в переменную их имена (пример - OneCoreUAP.OneSync~~~~0.0.1.0), если компонент найден, если нет - пропуск

Подскажите что тут править:
Код: Выделить весь код
@echo off
 
rem Список компонентов, которые нужно проверить
For %%A In (Hello.Face OpenSSH StepsRecorder ///остальные///) DO (set "ListComponent=%%A")
 
echo %ListComponent%
rem Тут должны быть компоненты
rem Hello.Face
rem OpenSSH
rem StepsRecorder
rem ///остальные///
 
rem Проверяем по очереди командой Dism и, если, компонент найден то заносим в переменную Component1/2/3 и тд, если не найден, пропускаем
rem Эта команда из всего списка установленных компонентов выцепляет ТОЛЬКО имя компонента, убирая столбец "Установлен"
for /f "tokens=1 delims=|" %%A in ('DISM /Online /Get-Capabilities /Format:Table ^| find /i "Установлен" ^| find /i "%ListComponent%"') do (set Component=%%A)
 
if defined Component1 (echo %Component1%) else (echo Компонент такой-такой не найден) 
if defined Component2 (echo %Component2%) else (echo Компонент такой-такой не найден)  
if defined Component3 (echo %Component3%) else (echo Компонент такой-такой не найден) 
pause&exit

Отправлено: 14:33, 19-01-2023

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Powershell
Код: Выделить весь код
$capInstalled = (Get-WindowsCapability -Online |? state -eq installed).name

$capInstalled

App.StepsRecorder~~~~0.0.1.0
App.Support.QuickAssist~~~~0.0.1.0
Browser.InternetExplorer~~~~0.0.11.0
DirectX.Configuration.Database~~~~0.0.1.0
Hello.Face.18967~~~~0.0.1.0
и т. д.
Если я правильно понял задачу в целом - найти компоненты, которые не установлены в системе из списка, то вот:
Код: Выделить весь код
$checkList = @(
"QuickAssist"
"test2"
)

$capInstalled = (Get-WindowsCapability -Online |? state -eq installed).name

$checkList |% {
    if (-not($capInstalled -match $_)) {
        Write-Host -fore red "$_ не установлен"
    }
}

test2 не установлен

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 19-01-2023 в 15:05.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:54, 19-01-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 33
Благодарности: 3

Профиль | Отправить PM | Цитировать


Идея в том, чтобы по определенному ранее сформированному списку (мне не нужен в списке MediaPlayer, например) найти установлен компонент или нет, а далее передать его в код для удаления
Код: Выделить весь код
@echo off
 
rem Список компонентов, которые нужно проверить
For %%A In (Hello.Face OpenSSH StepsRecorder ///остальные///) DO (set "ListComponent=%%A")
 
echo %ListComponent%
rem Тут должны быть компоненты
rem Hello.Face
rem OpenSSH
rem StepsRecorder
rem ///остальные///
 
rem Проверяем по очереди командой Dism и, если, компонент найден то заносим в переменную Component1/2/3 и тд, если не найден, пропускаем
rem Эта команда из всего списка установленных компонентов выцепляет ТОЛЬКО имя компонента, убирая столбец "Установлен"
for /f "tokens=1 delims=|" %%A in ('DISM /Online /Get-Capabilities /Format:Table ^| find /i "Установлен" ^| find /i "%ListComponent%"') do (set Component=%%A)
 
if defined Component1 (call :DelComponent) else (echo Компонент такой-такой не найден)
if defined Component2 (call :DelComponent) else (echo Компонент такой-такой не найден) 
if defined Component3 (call :DelComponent) else (echo Компонент такой-такой не найден)

pause&exit

:DelComponent
dism /Online /NoRestart /Remove-Capability /CapabilityName:Component1/2/3
goto:eof

Отправлено: 16:46, 19-01-2023 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6491
Благодарности: 1465

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$checkList = @(
"mediaplayer"
"test2"
)

$capInstalled = (Get-WindowsCapability -Online |? state -eq installed).name

$checkList |% {
    if ($capRm = $capInstalled -match $_) {
        "Удаляется $capRm"
        Remove-WindowsCapability -Name "$capRm" -Online
    }
}

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 18:01, 19-01-2023 | #4


Новый участник


Сообщения: 33
Благодарности: 3

Профиль | Отправить PM | Цитировать


Спасибо, попробую. На cmd бы еще, может кто-то подскажет

Отправлено: 19:00, 19-01-2023 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Проверка по списку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Проверка наличия файлов по списку и вызов контекстного действия Stalker_AleX333 Скриптовые языки администрирования Windows 8 16-04-2020 20:59
CMD/BAT - Удаление файлов по списку Freddy1984 Скриптовые языки администрирования Windows 11 04-05-2017 08:36
CMD/BAT - распределение файлов по папкам по списку bellagio Скриптовые языки администрирования Windows 1 11-05-2014 13:14
CMD/BAT - Перемещение файлов по списку Arsenik77 Скриптовые языки администрирования Windows 4 04-12-2011 20:43
V. 5.5/2000/2003 - задача по списку рассылки Yampo Microsoft Exchange Server 14 18-03-2010 10:11




 
Переход