Сопоставлять объекты с подстановочными символами в powershell - PullRequest
0 голосов
/ 16 октября 2018

Написание сценария, позволяющего избавиться от некоторых программ-брандмауэров Windows 10. При возникновении некоторых проблем.

Цель состоит в том, чтобы проверить, существует ли приложение, а затем удалить его с помощью Remove-AppXPackage.Я добавил все имена в массив строк со звездочками и с обеих сторон, но не могу найти совпадение, используя -like или -match в своем операторе if.

Я написал приведенный ниже код, чтобы попробоватьчтобы заставить его работать в точности как следующая команда:

Get-AppxPackage *windowsalarms* | Remove-AppxPackage

Но вместо этого сначала проверьте, существует ли этот пакет.Я предполагаю, что оригинальная команда сопоставляет объекты друг с другом.И я понимаю, что пытаюсь сравнить объект со строкой ... Итак, я должен создать массив объектов с просто свойством name для каждого и затем попытаться сравнить их?

$AppsToRemove = @("*broker*"
                ,"3dbuilder"
                ,"windowsalarms"
                ,"officehub"
                ,"skypeapp"
                ,"getstarted"
                ,"zunemusic"
                ,"solitarecollection"
                ,"bingfinance"
                ,"zunevideo"
                ,"bingnews"
                ,"windowsphone"
                ,"bingsports"
                ,"xboxapp"
                ,"whiteboard"
                ,"sway"
                ,"todos"
                ,"lens"
                ,"soundrecorder"
                ,"onenote"
                ,"remotedesktop"
                ,"networkspeedtest")

Get-AppxPackage | ForEach-Object {

$Placeholder = $_.Name

    Foreach ($app in $AppsToRemove){

        If ($app -like $Placeholder) {
            Write-Host "Match"


        }else{
            Write-Host "No match"

        }

    }

}

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Ответ @ShawnEsterman привел меня к идее, с которой я более знаком, и мне пришло в голову следующее, что сработало:

$i = 0
$AppsToRemove = @("broker"
                ,"3dbuilder"
                ,"windowsalarms"
                ,"officehub"
                ,"skypeapp"
                ,"getstarted"
                ,"zunemusic"
                ,"solitarecollection"
                ,"bingfinance"
                ,"zunevideo"
                ,"bingnews"
                ,"windowsphone"
                ,"bingsports"
                ,"xboxapp"
                ,"whiteboard"
                ,"sway"
                ,"todos"
                ,"lens"
                ,"soundrecorder"
                ,"onenote"
                ,"remotedesktop"
                ,"networkspeedtest")

$Packages = Get-AppxPackage | ForEach-Object {

Foreach ($App in $AppsToRemove){
    if($_ -match $App){

        Remove-AppxPackage $_
    }
}

}

Спасибо Шон за вашеруководство!

0 голосов
/ 16 октября 2018

Попробуйте что-то вроде этого, где вы объединяете свой массив в объект [Regex].Затем я получил все AppXPackages и передал их в Where-Object, чтобы сказать, соответствуют ли они исходному массиву.Я добавил -WhatIf в конце для тестирования.Это можно удалить, если вы хотите запустить скрипт для их удаления.

[Regex] $AppsToRemove = @(
    'broker'
    '3dbuilder'
    'windowsalarms'
    'officehub'
    'skypeapp'
    'getstarted'
    'zunemusic'
    'solitarecollection'
    'bingfinance'
    'zunevideo'
    'bingnews'
    'windowsphone'
    'bingsports'
    'xboxapp'
    'whiteboard'
    'sway'
    'todos'
    'lens'
    'soundrecorder'
    'onenote'
    'remotedesktop'
    'networkspeedtest'
) -join '|'

Get-AppxPackage | Where-Object -Property Name -Match -Value $AppsToRemove | Remove-AppxPackage -Verbose -WhatIf

Я получаю следующий вывод, если некоторые из них уже удалены на моей машине:

What if: Performing the operation "Remove package" on target "Microsoft.AAD.BrokerPlugin_1000.16299.15.0_neutral_neutral_cw5n1h2txyewy".
What if: Performing the operation "Remove package" on target "Microsoft.WindowsAlarms_10.1804.1101.1000_x64__8wekyb3d8bbwe".
What if: Performing the operation "Remove package" on target "Microsoft.WindowsSoundRecorder_10.1804.911.1000_x64__8wekyb3d8bbwe".
What if: Performing the operation "Remove package" on target "Microsoft.ZuneVideo_10.18082.10311.0_x64__8wekyb3d8bbwe".
What if: Performing the operation "Remove package" on target "Microsoft.ZuneMusic_10.18091.10321.0_x64__8wekyb3d8bbwe".
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...