Сравнение 2 массивов и сохранение одинаковых столбцов - PullRequest
0 голосов
/ 16 мая 2018

Я работаю над способом удаления приложений по умолчанию с помощью сценария запуска на ПК с Windows 10.

Вот мой сценарий:

$RemovalList = @(
    'Microsoft.Messaging'
    'Microsoft.MicrosoftOfficeHub'
    'Microsoft.MicrosoftSolitaireCollection'
    'Microsoft.Office.OneNote'
    'Microsoft.SkypeApp'
    'microsoft.windowscommunicationsapps'
    'Microsoft.XboxApp'
    'Microsoft.XboxGameOverlay'
    'Microsoft.XboxIdentityProvider'
    'Microsoft.XboxSpeechToTextOverlay'
    'Microsoft.ZuneMusic'
    'Microsoft.ZuneVideo'
)

$RemovalList1 = "" | Select DisplayName
$RemovalList1.DisplayName = $RemovalList

$array = @();
$dismRaw = (DISM /Online /Get-ProvisionedAppxPackages)
$PNList =  ($dismRaw | Select-string PackageName) -replace "PackageName : ", ""
$DNList = ($dismRaw | Select-string DisplayName) -replace "DisplayName : ", ""
$Apps = "" | select DisplayName,PackageName
$Apps.DisplayName = $DNList
$Apps.PackageName = $PNList
$array += $Apps

$Apps = $Apps | Where {$_.DisplayName -eq $RemovalList1.DisplayName} #<-- Trying to remove the differences
$Apps.PackageName | % {dism /Online /Remove-ProvisionedAppxPackage /PackageName:$_}

Чего мне не хватает?

Я хочу, чтобы массив $Apps что-либо удалял, в $RemovalList.Затем я хочу передать это в команду dism /Online /Remove-ProvisionedAppxPackage /PackageName:$_.

Обновление 5/17/2018 Дополнительная информация: если я использую Remove-ProvisionedAppxPackage, он удаляется для системы и когда пользователь входит в системув систему в первый раз приложения не будут установлены, но командлет не будет работать при запуске.Он не обнаружит, что они там.Использование «dism / Online / Remove-ProvisionedAppxPackage / PackageName: $ _» работает ..... Я хотел взять 2 массива.Первый - это $ RemovalList, второй - это $ apps.$ apps имеет 2 столбца DisplayName и PackageName.Я хочу удалить строки из массива $ apps, которых нет в $ RemovalList.

Другое обновление 5/17/2018 Поэтому вместо того, чтобы сравнивать 2 массива и выделять то, чего нет в обоих, я решил сравнить PackageName со списком $ Removal List.Это работает, но все еще не получил мой оригинальный вопрос.:( Ну что ж, это работает.

Новый код:

$RemovalList=@(
'Microsoft.Messaging'
'Microsoft.MicrosoftOfficeHub'
'Microsoft.MicrosoftSolitaireCollection'
'Microsoft.Office.OneNote'
'Microsoft.SkypeApp'
'microsoft.windowscommunicationsapps'
'Microsoft.XboxApp'
'Microsoft.XboxGameOverlay'
'Microsoft.XboxIdentityProvider'
'Microsoft.XboxSpeechToTextOverlay'
'Microsoft.ZuneMusic'
'Microsoft.ZuneVideo'
)

$dismRaw = (DISM /Online /Get-ProvisionedAppxPackages)
$PNList =  ($dismRaw | Select-string PackageName) -replace "PackageName : ", ""
$AppsToRemove = "" | select PackageName
$AppsToRemove.PackageName = $PNList | where {$RemovalList -contains $(($_).Split("_")[0])}

ForEach ($RemoveApp in $AppsToRemove.PackageName) {
    Write-Output "Removing: $RemoveApp"
    DISM /Online /Remove-ProvisionedAppxPackage /PackageName:$RemoveApp

}  

Спасибо за помощь! :) 1026 *

1 Ответ

0 голосов
/ 16 мая 2018

PowerShell имеет командлеты для приложений AppX ... ваш сценарий можно записать в виде:

$RemovalList=@(
'Microsoft.Messaging'
'Microsoft.MicrosoftOfficeHub'
'Microsoft.MicrosoftSolitaireCollection'
'Microsoft.Office.OneNote'
'Microsoft.SkypeApp'
'microsoft.windowscommunicationsapps'
'Microsoft.XboxApp'
'Microsoft.XboxGameOverlay'
'Microsoft.XboxIdentityProvider'
'Microsoft.XboxSpeechToTextOverlay'
'Microsoft.ZuneMusic'
'Microsoft.ZuneVideo'
)

$RemovalList | % {Get-AppxPackage -Name $_} | Remove-AppxPackage -WhatIf

Удалите -WhatIf, чтобы фактически удалить эти вещи.

Также см. эта хорошая ссылка GitHub для дополнительной информации по управлению элементами Windows, которые вам могут не понравиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...