Войти

Показать полную графическую версию : Проверка по списку


VladoSer
19-01-2023, 14:33
Привет. Есть команда DISM /Online /Get-Capabilities /Format:Table | find /i "Установлен"
Выводит компоненты установленные на ПК
https://i.imgur.com/m9VigY5.png

Есть лист (список) компонентов (ниже в коде)
Задача - по списку прогнать компоненты этой командой и занести в переменную их имена (пример - 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

DJ Mogarych
19-01-2023, 14:54
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 не установлен

VladoSer
19-01-2023, 16:46
Идея в том, чтобы по определенному ранее сформированному списку (мне не нужен в списке 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

DJ Mogarych
19-01-2023, 18:01
$checkList = @(
"mediaplayer"
"test2"
)

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

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

VladoSer
19-01-2023, 19:00
Спасибо, попробую. На cmd бы еще, может кто-то подскажет




© OSzone.net 2001-2012