我正致力于在Windows 10 PC上使用启动脚本删除默认应用程序。
到目前为止,这是我的脚本:
$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,它将删除System,当用户第一次登录系统时,应用程序将无法安装,但cmdlet将无法作为启动。它不会发现它们在那里。使用“dism / Online / Remove-ProvisionedAppxPackage / PackageName:$ _”工作.....我想要2个阵列。首先是$ RemovalList,第二个是$ apps。 $ apps有2列DisplayName和PackageName。我想删除$ apps数组中不在$ RemovalList中的行。
另一个更新5/17/2018 因此,我决定将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
}
感谢您的帮助! :)
答案 0 :(得分:3)
PowerShell具有AppX内容的cmdlet ...您的脚本可以写成:
$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
以实际删除这些内容。
另请参阅this nice GitHub link以获取更多可以控制您可能不需要的Windows项目的内容。