夜雨聆风学习资料网

ARTICLE · 1337988

SCCM-22:SCCM 部署 WPS 实战:解决用户目录安装、多用户识别与静默卸载(附脚本)!

SCCM-22:SCCM 部署 WPS 实战:解决用户目录安装、多用户识别与静默卸载(附脚本)!

承接上篇

前两篇(SCCM-20 、SCCM-21), 我们用微信(EXE)搞定了常规的强制安装和平滑升级。但在企业里,总有一些“不走寻常路”的软件。

比如今天的主角——WPS Office。它默认安装在当前用户的 AppData 目录里,而不是 Program Files。如果一台电脑有多个员工轮流登录,普通文件夹检测会立刻失效。甚至,它的静默安装和卸载,都需要特定的参数和 PowerShell 脚本配合。

这一篇,我们挑战 SCCM 里的“天花板”难度:用自定义脚本检测 WPS,确保多用户环境下依然能精准识别。

本篇目标

掌握 WPS 的特殊静默安装参数,学会使用 PowerShell 脚本编写部署类型检测规则,并解决多用户环境下检测路径动态变化的难题。

前置条件:目录结构与安装包

按照老规矩,建立版本隔离目录:

  • \\CM01.szkj.com\Sources\Apps\WPS\v12.1.0.17133
  • 将 WPS_Setup_17133.exe 放入该目录。

操作步骤:创建并发布 WPS 应用(同微信一样就不再重复截图)

步骤一:创建应用程序基础信息

  1. 进入 应用程序,点击 创建应用程序 -> 手动指定应用程序信息。
  2. 填入名称:WPS_12.1.0.17133,版本:12.1.0.17133。
  3. 部署类型选 脚本安装程序。

步骤二:配置安装与卸载命令(核心参数)

在“内容”页面:

  • 内容位置:\\CM01.szkj.com\Sources\Apps\WPS\v12.1.0.17133
  • 安装程序:"WPS_Setup_17133.exe" /s -agreelicense(解释:/s 是静默安装,-agreelicense 是自动同意许可协议,防止安装卡在许可界面。)
  • 卸载程序:powershell.exe -ExecutionPolicy Bypass -Command "Stop-Process -Name 'wps','et','wpp','ksolaunch','wpscloudsvr' -Force -ErrorAction SilentlyContinue; Start-Sleep -Seconds 3; $u = (Get-CimInstance Win32_Process -Filter \"Name = 'explorer.exe'\" | Select-Object -First 1); $user = if($u){(Invoke-CimMethod -InputObject $u -MethodName GetOwner).User} else {$env:USERNAME}; $path = \"C:\Users\$user\AppData\Local\Kingsoft\WPS Office\"; if(Test-Path $path){ $exe = (Get-ChildItem $path -Filter uninst.exe -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1).FullName; if($exe){ Start-Process -FilePath $exe -ArgumentList '/s' -Wait; exit 0 } }; exit 0"(解释:强杀进程并动态抓取当前用户卸载路径,-ExecutionPolicy Bypass 绕过限制。)

步骤三:配置检测方法(核心大招:自定义脚本)

在“检测方法”页面,不要选“文件系统”,选择“使用自定义脚本检测此部署类型的状态”。

将以下 PowerShell 脚本贴入框中(保留你的原逻辑,仅做排版适配):

# ==============================================================================
# SCCM 自定义检测脚本 (纯净版)
# 适用软件: WPS Office
# 检测文件: ksolaunch.exe
# 目标版本: 12.1.0.17133 及以上
# ==============================================================================
$TargetVersionStr = "12.1.0.17133"
$TargetFileName = "ksolaunch.exe"
# 1. 获取真实登录用户 (兼容 SYSTEM 和 管理员身份)
$CurrentUser = $null
$ExplorerProcess = Get-CimInstance -ClassName Win32_Process -Filter "Name = 'explorer.exe'" -ErrorAction SilentlyContinue | Select-Object -First 1
if ($ExplorerProcess) {
    $Owner = Invoke-CimMethod -InputObject $ExplorerProcess -MethodName GetOwner -ErrorAction SilentlyContinue
    if ($Owner -and $Owner.User) { $CurrentUser = $Owner.User }
}
# 如果抓不到真实用户(例如无人登录),回退到当前环境变量
if (-not $CurrentUser) { $CurrentUser = $env:USERNAME }
# 2. 拼接基础路径 (针对 WPS 当前用户安装目录)
$BasePath = "C:\Users\$CurrentUser\AppData\Local\kingsoft\WPS Office"
# 3. 目录不存在 = 未安装,SCCM 会触发安装 (exit 0 且无输出)
if (-not (Test-Path -Path $BasePath -PathType Container)) { exit 0 }
# 4. 拼接文件路径并检查文件
$TargetFilePath = Join-Path -Path $BasePath -ChildPath $TargetFileName
if (-not (Test-Path -Path $TargetFilePath -PathType Leaf)) { exit 0 }
# 5. 提取版本并比对
try {
    # 读取底层文件版本属性
    $DetectedVersionStr = (Get-Item $TargetFilePath).VersionInfo.FileVersion
    if (-not $DetectedVersionStr) { exit 1 } # 无法读取,返回未知错误
    # 关键修复:处理 WPS 文件版本中的逗号问题 (12,1,0,17133 -> 12.1.0.17133)
    $FixedVersionStr = $DetectedVersionStr -replace ',', '.'
    # 转换为版本对象进行比对
    $DetectedVersion = [version]$FixedVersionStr
    $TargetVersion = [version]$TargetVersionStr
    # 6. 判定结果
    if ($DetectedVersion -ge $TargetVersion) {
        # 版本达标:输出内容 + 退出码 0,SCCM 判定为“已安装”
        Write-Host "Installed. Version: $DetectedVersion"
        exit 0
    } else {
        # 版本过低:静默退出码 0,SCCM 判定为“未安装”,触发安装/覆盖升级
        exit 0
    }
} catch {
    # 发生异常:退出码 1,SCCM 判定为“未知”
    exit 1
}

步骤四:部署

  1. 右键应用,选择 部署。
  2. 集合选测试集合,部署目的选“可用”。
  3. 一路下一步完成。

客户端验证

  1. 在客户端刷新策略。
  2. 打开软件中心,点击安装 WPS。
  3. 装完后,软件中心会显示“已安装”。
  4. 多用户测试:注销当前用户,换另一个域用户登录,刷新策略后,SCCM 依然能通过脚本准确抓取到该用户的 AppData 路径,判断是否已安装。(我直接换另一个电脑和账户测试可以正常)

常见报错与实战避坑

1. 脚本执行失败或报错 0x87D00327

    原因:客户端 PowerShell 执行策略被强制锁定为 Restricted。
    解决:卸载命令加 -ExecutionPolicy Bypass;SCCM 客户端设置里将“PowerShell 执行策略”设为“绕过(Bypass)”。

2. 多用户切换后,检测显示未安装

    原因:脚本里的 $env:USERNAME 兜底逻辑在 SYSTEM 环境下可能抓不到当前登录者。
    解决:确保抓取 explorer.exe 的逻辑生效,它是抓取当前“登录桌面用户”最准的锚点。

3. 安装命令执行后一直没反应

    原因:漏了 -agreelicense 参数,安装程序静默卡在后台等待用户点同意。
    解决:补全安装命令参数。

下篇预告

WPS 这个硬骨头啃下来后,你对脚本检测和用户目录已经了如指掌。如果你的公司有 500 台电脑,想先推给 50 台测试,下周再推给全公司,这种“灰度发布”怎么实现?下一篇 分阶段部署(Phased Deployments)实战,我们将教你像“放水”一样,安全地进行大规模推送!

写在最后

👍 支持一下:如果这篇文章对你有帮助,点个【在看💖】就行,让更多运维兄弟少踩坑。

📌 系列合集:点公众号服务菜单「实战合集」,一站直达系列干货。

[虚拟化与存储] —从装ESXi到搭高可用,存储备份全覆盖

[日志中心实战] — 从0到1搭建企业日志审计平台

[系统部署与自动化] — WDS+MDT批量部署实战

[SCCM企业级运维实战]—  终端管理全生命周期落地


👋 感兴趣的关注「LiGongIT」别错过,下篇见! 

我是李工,专注 ESXi / vCenter / 存储 / 网络 / 日志审计 / Windows 运维 等中小企业IT实战,关注我,一起少走弯路。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料