 |
|
Проверка по списку
Вложений: 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
|
DJ Mogarych |
19-01-2023 14:54 3001279 |
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 не установлен
|
Идея в том, чтобы по определенному ранее сформированному списку (мне не нужен в списке 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 3001306 |
Код:
$checkList = @(
"mediaplayer"
"test2"
)
$capInstalled = (Get-WindowsCapability -Online |? state -eq installed).name
$checkList |% {
if ($capRm = $capInstalled -match $_) {
"Удаляется $capRm"
Remove-WindowsCapability -Name "$capRm" -Online
}
}
|
Спасибо, попробую. На cmd бы еще, может кто-то подскажет
|
Время: 18:08.
© OSzone.net 2001-