Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Проверка по списку (http://forum.oszone.net/showthread.php?t=352855)

VladoSer 19-01-2023 14:33 3001278

Проверка по списку
 
Вложений: 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 не установлен


VladoSer 19-01-2023 16:46 3001292

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


VladoSer 19-01-2023 19:00 3001312

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


Время: 18:08.

Время: 18:08.
© OSzone.net 2001-