我最初使用此处找到的 MSI 在我们的组织中部署了 Python 3.8.1(如果相关,则通过 WSUS Package Publisher)。我使用 WSUS Package Publisher 安装了这些 MSI,并为每个 MSI 使用以下命令:
msiexec.exe /i core.msi /qn /norestart ALLUSERS=1
不幸的是,由于某种原因,这对我造成了许多问题,这些问题似乎都指向 ALLUSERS=1 被忽略,可能是由于安装程序缺乏提升(未出现在已安装的应用程序列表中,未通过 py 出现 - 0 列表)。令人沮丧的是,在我们意识到这些问题之前,这些都被意外地部署到了每个人身上。
要清理,我现在需要卸载这些 MSI。在受影响的机器上右键单击这些 MSI 并单击“卸载”可以正常工作 - 我会看到“您确定要卸载吗?” 提示,然后是提升请求,然后按预期卸载。
但是,因为我试图默默地这样做,以便我可以推出它。这是我试图通过提升的 shell 运行的命令:
msiexec.exe /x .\core.msi /qn
什么都没发生。我可以在任务管理器中看到 msiexec.exe 正在运行而没有任何活动,所以我的感觉是它正在达到“你确定吗?” 提示并卡在该提示上。
如何在静默卸载期间绕过此提示?
因此,在我和我的同事对此进行了一段时间的故障排除后,我们对情况和实际发生的情况有了更好的了解。这并不能解决我们最初尝试做的事情(通过 WSUS 部署 Python 3.8.1 MSI),但它至少可以帮助我们清理。希望这可以帮助其他可能在 WSUS Package Publisher 或其他方面经历过类似情况的管理员!
我们通过 WSUS 部署 Python,这意味着所有本地计算机都将 Python 安装为 NTAUTH\SYSTEM。这解释了为什么 Python 在我在 .MST 中指定的位置(C:\Program Files\Python38)中正确安装,没有任何抱怨。
出于某种原因,Python MSI 都忽略了 .MST 中的 ALLUSERS=1 调用,并将其指定为参数。不知道为什么(也许 Python 团队的某个人或有更深入了解的人可以加入?:))。
这意味着,根据我的理解/测试,安装程序检测到它没有作为提升的进程运行,因此将 MSI 安装为用户 NTAUTH\SYSTEM,对于 NTAUTH\SYSTEM,将 Python 启动器等的密钥放在 HKCU而不是HKLM。但由于 .MST 和 NTAUTH\SYSTEM 拥有的访问权限,它会按要求将安装文件放在 C:\Program Files\Python38 中。
这解释了为什么安装会失败,无论如何都无法卸载,以及为什么我们的 Python 启动器在 PATH 设置正确的情况下表现异常。
因此,为了清理这个巨大的混乱,我们需要将所有 Python 3.8.1 MSI 卸载为 NTAUTH\SYSTEM,并且不进行提升。有几种方法可以做到这一点 - 通过下载并使用 PSEXEC 启动 CMD 或 Powershell 作为系统 (psexec64.exe -sid powershell.exe) 并通过它运行 MSIEXEC,或者(我们采用的方法)在机器,让它作为 NTAUTH\SYSTEM 运行,没有最高权限,并卸载任何具有“Python 3.8.1*”属性的东西。一个快速的 Powershell 脚本: