我所在的 IT 公司正计划在 1-2 年内全面推出 Windows 10 电脑,以取代老旧的 Windows 7 电脑。使用 Windows 7 Professional,安装过程很简单 - 构建一个没有任何制造商过度安装软件的映像,安装行业专用软件,然后部署到电脑并根据需要激活。唯一需要保护的电脑是 UAC,不允许用户在没有管理员凭据的情况下下载程序。简单。有效。
Windows 10(和 8.x)带来了一个新的问题 - Windows 应用商店及其带来的 UWP(通用 Windows 平台)应用。对于个人用户来说,这很棒。但对于企业来说就没那么好了。直到 2015 年 11 月,都可以使用组策略或 AppLocker 来限制用户对这些资源的访问。然而,在 11 月更新(超过版本 1511)之后,Microsoft已删除在 Windows 10 的专业版中,此功能仅限于企业版和教育版。对于许多小型企业来说,通过批量许可计划获取 Windows 并不高效,因此专业版是最佳选择。下面回答了两种完全删除 Windows 应用商店和精选应用的方法 - 在用户登录后按用户逐一删除,或者为机器的所有当前和未来用户彻底删除。
答案1
编辑:使用方法 2 删除应用程序时,应用程序可能仍会显示在搜索中,但打开后会立即关闭。若要使它们不显示,请在方法 2 之后使用方法 1。
编辑2:我正在调查一个问题,我无法再访问测试电脑上的任何 Windows 应用程序(包括我留下的应用程序)。在此之前,请避免使用方法 2。
方法 1 - 使用管理 PowerShell 删除现有用户
此方法使用 Windows 10 Pro 中包含的 PowerShell 从计算机上预先存在的用户中删除 UWP 应用程序(也称为 Appx 包)。
首先,以管理员身份运行 PowerShell,方法是在“开始”中搜索它并右键单击 > 以管理员身份运行。
接下来,获取已安装软件包的列表。为此,我们可以键入Get-AppxPackage
并阅读出现的数百万个内容。相反,我们将它通过管道传输到仅输出软件包简称的 select 命令,然后将其通过管道传输到 sort 命令以按字母顺序对其进行排序(只是为了看起来美观)。
Get-AppxPackage | select name | sort name
这将产生如下输出:
在本例中,我们将删除所有 Bing 应用(新闻、体育、天气等)。为此,我们再次获取 Appx 包,但这次使用通配符按名称获取它们。然后我们将它们通过管道传输到命令Remove-AppxPackage
,这很容易理解。
Get-AppxPackage -name *Bing* | Remove-AppxPackage
PowerShell 将显示部署过程,然后将控制权交还给您。之后按名称获取 Appx 包将返回以下内容,所有 Bing 应用程序均无效:
要删除 Windows 应用商店本身,请执行与上述相同的操作:
Get-AppxPackage -name *WindowsStore* | Remove-AppxPackage
这些命令仅从当前用户中删除应用程序。要为计算机上的所有用户删除它们,请添加-allusers
如下标志:
Get-AppxPackage -allusers -name *Bing* | Remove-AppxPackage
方法 2 - 通过限制对 WindowsApps 文件夹的访问来为所有用户删除
这种方法更复杂,但也更可靠。我们将从安装 Windows 应用程序的文件夹中删除系统的访问权限,然后删除我们想要删除的应用程序,这样它们就无法再回来了。
Windows 应用程序存储在 中C:\Program Files\WindowsApps\
。这是一个隐藏文件夹,因此您必须先显示隐藏文件夹:
如果您现在尝试修改文件夹属性,您将无法修改。这是因为 TrustedInstaller 是该文件夹的所有者。要更改此设置,请右键单击该文件夹,选择“属性”,然后转到“安全”文件夹。单击“高级”按钮。
该Owner:
字段将显示TrustedInstaller
或Unable to display current owner
,就像我的情况一样。单击所有者旁边的更改可更改所有者。
将文件夹更改为本地或域管理员(我使用域管理员执行此操作,但在本教程中使用本地管理员)。确保Replace owner on subcontainers and objects
选中该框。
完成此步骤后,您需要单击“确定”并关闭所有打开的对话框和属性框以使更改生效。然后,重新打开文件夹属性并转到安全选项卡。您现在可以更改文件夹权限。单击“编辑”。
从组和用户名列表中完全删除 SYSTEM(这意味着一旦应用程序消失,就无法将其重新安装到文件夹中)。接下来,将您的本地或域管理员添加到列表中,并授予您完全控制权。
最后,关闭所有对话框并进入 WindowsApps 文件夹。选择并删除您喜欢的应用程序。
我建议保留 .NET 框架以及照片、计算器,windowscommunicationsapps
以确保计算机继续正常工作。我删除了 Zune 视频和音乐(电影和电视以及 Groove 的软件包),但这导致计算机没有音乐和视频播放程序,因此如果您想要此功能,则必须安装其他程序。
结语
请注意,这是一个未完成的解决方案,我已确认它适用于新用户和重新启动,但尚不清楚它是否可靠。如果您不知道自己在做什么,请不要执行上述步骤,因为如果操作错误,可能会严重损坏您的计算机。对于按照上述步骤可能导致的任何负面或问题,我不承担任何责任。
欢迎随意添加此解决方案,因为我希望其他管理员(或者只是恼火的用户)将来可以遵循它。
答案2
仅供分享,我编写了一个用于删除 UWP 臃肿软件应用的 Powershell 脚本。您可以将其保存为 .ps1 脚本并运行。它会在 GUI 中提示您选择要删除的 UWP 应用。它会为您和所有用户删除,并使用 UAC 自动提升自身权限。
$currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())
if( -not ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)))
{
Write-Host "Running Admin Shell, Please wait....."
Start-Sleep -Seconds 1
Start-Process powershell.exe -ArgumentList "-WindowStyle Hidden -ExecutionPolicy Bypass -File `"$($MyInvocation.MyCommand.Path)`"" -Verb RunAs
Exit 0
}
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$all_uwpapps = "3D Viewer,Advertising,Alarms and Clock,Bing integration,Bubble Witch 3 Saga,Calculator,Calendar,Camera,Feedback Hub,Get Help,Get Started,Groove Music,Mail,Maps,Microsoft News,Microsoft Solitare Collection,Minecraft UWP,Mixed Reality Portal,Movies and TV,Office Online,OneNote Online,Office Lens,Paint 3D,People,Photos,Skype,Snip and Sketch,Sticky Notes,Tips,To Do,Video Editor,Voice Recorder,Weather,Xbox and Game bar,Wallet,Your Phone" -split ","
$def_uwpapps = "3D Viewer,Advertising,Alarms and Clock,Bing integration,Bubble Witch 3 Saga,Calendar,Camera,Feedback Hub,Get Help,Get Started,Groove Music,Maps,Microsoft News,Microsoft Solitare Collection,Minecraft UWP,Mixed Reality Portal,Office Lens,Paint 3D,People,Snip and Sketch,Sticky Notes,Tips,To Do,Video Editor,Voice Recorder,Weather,Xbox and Game bar,Wallet,Your Phone" -split ","
$appx = [ordered]@{"3D Viewer" = "Microsoft.Microsoft3DViewer"; "Advertising" = "Microsoft.Advertising.Xaml*"; "Alarms and Clock" = "Microsoft.WindowsAlarms"; "Bing integration" = "Microsoft.Bing*"; "Bubble Witch 3 Saga" = "king.com.BubbleWitch3Saga"; "Calculator" = "Microsoft.WindowsCalculator"; "Calendar" = "Microsoft.Calendar"; "Camera" = "Microsoft.WindowsCamera"; "Feedback Hub" = "Microsoft.WindowsFeedbackHub"; "Get Help" = "Microsoft.GetHelp"; "Get Started" = "Microsoft.Getstarted"; "Groove Music" = "Microsoft.Zune*"; "Mail" = "Microsoft.Mail"; "Maps" = "Microsoft.WindowsMaps"; "Microsoft News" = "Microsoft.News"; "Microsoft Solitare Collection" = "Microsoft.MicrosoftSolitaireCollection"; "Minecraft UWP" = "Microsoft.MinecraftUWP"; "Mixed Reality Portal" = "Microsoft.MixedReality.Portal"; "Movies and TV" = "Microsoft.MoCamera"; "Office Online" = "Microsoft.MicrosoftOfficeHub"; "OneNote Online" = "Microsoft.Office.OneNote"; "Office Lens" = "Microsoft.Office.Lens"; "Paint 3D" = "Microsoft.MSPaint"; "People" = "Microsoft.People"; "Photos" = "Microsoft.Windows.Photos"; "Skype" = "Microsoft.SkypeApp"; "Snip and Sketch" = "Microsoft.ScreenSketch"; "Sticky Notes" = "Microsoft.MicrosoftStickyNotes"; "Tips" = "Microsoft.HelpAndTips"; "To Do" = "*Todo*"; "Video Editor" = "Microsoft.VP9VideoExtensions"; "Voice Recorder" = "Microsoft.VoiceRecorder"; "Weather" = "*Weather*"; "Xbox and Game bar" = "Microsoft.Xbox*"; "Wallet" = "Microsoft.Wallet"; "Your Phone" = "Microsoft.YourPhone"}
$top=20;$left=50
$f = New-Object System.Windows.Forms.Form
$f.Text = "Select UWP apps to remove"
$f.StartPosition = "CenterScreen"
$f.Size = New-Object System.Drawing.Size(400,850)
$all_uwpapps | Foreach {
$c = $_.split(" ") -join "_"
$top += 20
iex "`$$($c) = New-Object System.Windows.Forms.CheckBox;`$$($c).Top = $($top);`$$($c).Left = $($left);`$$($c).Anchor='Left,Top';`$$($c).Parent='';`$$($c).Text='$($_)';`$$($c).Autosize=`$true;if('$_' -in `$def_uwpapps){`$$c.Checked=`$true};`$f.Controls.Add(`$$c)"
}
$ok=New-Object System.Windows.Forms.Button;$ok.Text='OK';$ok.Top=770;$ok.Left=290
$ok.add_click({$f.Close()});$f.Controls.AddRange($ok)
$sa=New-Object System.Windows.Forms.Button;$sa.Text='Select All';$sa.Top=770;$sa.Left=200
$sa.add_click({$f.Controls | Where-Object {($_.Checked) -or !($_.Checked)} | Foreach {try{$_.Checked=$True}catch{}}});$f.Controls.AddRange($sa)
$null = $f.ShowDialog()
$choices = $f.Controls | Where-Object {$_.Checked} | Select-Object -ExpandProperty Text
$choices | Foreach {
Get-AppxPackage $appx."$_" | Remove-AppxPackage -ErrorAction SilentlyContinue
Get-AppxPackage $appx."$_" -AllUsers | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
}
$wsh = New-Object -ComObject Wscript.Shell
$wsh.PopUp("Removed UWP apps, thanks for using!",$null,"Success",64)