我正在寻求有关执行上述任务的指导。
我的 Powershell 脚本如下,该脚本当前删除一个特定命名的应用程序。
$AppsToDelete="*Microsoft.WindowsReadingList*"
Foreach ($AppName in $AppsToDelete)
{
get-appxprovisionedpackage -online | where packagename -like $AppName | remove-appxprovisionedpackage -Online
Get-AppxPackage -name $AppName -allusers | Remove-AppxPackage
}
SCCM2012执行脚本使用的程序如下——
PowerShell.exe -ExecutionPolicy UnRestricted -File .\delappsreadinglistonly.ps1
我已经在 SCCM 2012 中创建了一个程序并部署到客户端。
该程序设置为以用户身份运行,而不是系统身份运行,
EXECMGR.log文件告诉我脚本已被客户端接收并成功运行,退出代码=0,执行状态为成功。
也就是说,“阅读列表”磁贴仍然在(Metro?)开始屏幕上,“阅读列表”应用程序仍然出现在按名称字母顺序排列的应用程序中并可以执行,并且各种文件夹仍然存在于 C:\program files\windowsapps\
如果能提供指点我将非常感激。
答案1
我发现你的脚本有两个潜在问题:
- 调用
-AppxProvisionedPackage
最有可能需要提升权限。当您以用户身份运行脚本时,它可能会引发异常。 - 调用
Get-AppxPackage -allusers
需要管理员权限。 文档读作-allusers
“要使用此参数,您必须使用管理员权限运行该命令。”
我不清楚你的目标到底是什么。以下是我处理 Windows 8.1 开始屏幕中混乱的磁贴的方法:
- 创建具有以下特征的 SCCM 应用程序:
- 无安装程序
- 卸载程序需要
Remove-AppxPackage
常用应用程序列表 - 该应用程序列表的检测脚本
- 将带有卸载操作的应用程序部署到受影响的用户。
我使用这种策略是因为如果有必要,它可以使事情变得更有针对性,即将来可以确定哪些应用程序可供特定用户使用。
当部署了此应用程序以进行删除的用户登录时,CcmExec
最终会检测到该应用程序并调用卸载命令。调用卸载命令后,应用程序将不再对用户可见或可用。
卸载应用程序.ps1
这是我使用的卸载脚本的主体。您需要小心设置用于(卸载)安装的 PowerShell 脚本,因为从脚本中可靠地获取退出代码有点棘手。
$appList = 'Microsoft.BingSports',
# ...longlist of other apps...
'Microsoft.WindowsReadingList'
Get-AppxPackage |
? { $_.Name -in $appList } |
% { Remove-AppxPackage $_.PackageFullName }
检测应用程序.ps1
以下是我使用的检测脚本的主体。请注意,使用 PowerShell 检测脚本存在一些缺陷:
- 如果您在客户端上有执行策略,则需要对脚本进行签名,
xSigned
无论客户端设置和日志如何说明使用-ByPass
。 - 检测脚本输出的语义非常神秘,只有非正式记录,但 IME 是可靠的。
- 您需要使用以下方法烘焙 PowerShell 检测脚本Adam Meltzer 的解决方法让他们工作。
- 你至少应该知道PowerShell 检测脚本运行的上下文中存在一些奇怪之处。
如果您完成所有这些,PowerShell 检测脚本将能够完美地完成此类复杂、精确或非常规的检测。
$appList = 'Microsoft.BingSports',
# ...longlist of other apps...
'Microsoft.WindowsReadingList'
Get-AppxPackage |
? { $_.Name -in $appList }