我有一个用户需要卸载 iCloud。问题是我已经听见她像生病的骆驼一样咳嗽了两个星期了(“HAROUUUUUU”),我不想得到她所得到的。
如何远程卸载该程序?
两端都是 Windows 7,AD,我有足够的域权限来查看她电脑上安装的程序
wmic /output:c:\userName.txt /user:MYUSERNAMEHERE /node:"THEIRCOMPUTERNAME" product get name
(不要忽略他们的计算机名称周围的引号)并且我还可以浏览她的 C$ 驱动器。
编辑:我发布了问题和答案,以传播知识。虽然这个例子是我学会如何远程卸载的时候,尽管这是一次性交易,但也许使用下面的解决方案的更好情况是当您需要进行安静卸载时,我碰巧为这个用户做了这件事,以避免中断用户的工作流程,或者通过网络进行大规模卸载。
答案1
这是两个非常有知识的消息来源的汇编答案:
步骤 1,从Windows 将卸载的 MSI 文件存储在哪里?找到程序(通常)安装的 MSI(跳至“2)”以获得更简单的方法):
当用户安装某些应用程序时,Windows 会执行以下操作:
1)为此应用程序创建一个注册表项。
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall[产品 ID GUID]
如果您有权访问应用程序安装程序的原始 msi 文件,您可以通过在 orca.exe 中打开 msi 文件并单击 orca 左侧的“属性”,然后在右侧查找“ProductCode”行来找到 [ProductID GUID]。如果您无权访问原始 *.msi 文件,您只需搜索注册表项 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 即可找到应用程序的名称。
如果您想从控制面板中已安装的应用程序列表中删除您的应用程序(例如,拒绝卸载),您可以从此卸载键中删除该条目。它肯定会从控制面板中的列表中消失,但 Windows 仍会记住它。例如,如果您尝试安装同一应用程序的下一个版本,安装程序可能仍会坚持卸载上一个版本。有关详细信息,请参阅第 2 项。
2) Windows 将原始 *.msi 文件复制到文件夹 C:\Windows\Installer 中,并将其重命名为随机名称(但保留 .msi 扩展名)。Windows 还会在注册表 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData[InternalUserId]\Products[一些随机的 guid 类字符序列,用于识别您的安装]\InstallProperties 中创建一个键。此注册表项中的 ValueName“LocalPackage”将指向重命名的 msi 文件。要在 C:\windows\Installer 中找到该文件,您可以在 Windows 资源管理器中导航到此文件夹,将其切换到“详细信息”视图,使“主题”列可见,您将看到所有 nnnnnnnn.msi 文件对应的产品名称。– 注意,添加“主题”后,更改排序顺序以刷新列表
3) 对于上述链接中的 @Joe B 来说,这是必要的:我必须复制 5188bfc6.msi 文件 ( hex#.msi ) 并将其重命名为原始文件名 MyApp.msi,然后卸载程序才会接受该文件。 此后,卸载工作正常。
第 2 步,安装 PsExec(来自 MS) - 这些说明取自https://techtalk.gfi.com/how-to-uninstall-software-from-remote-pcs-using-the-command-line/:
从 Microsoft 下载 PSEXEChttp://technet.microsoft.com/en-us/sysinternals/bb897553.aspx。通过将文件复制到 PATH 中的目录来将其安装到您的计算机上。System32 就很好,或者您可以创建一个新目录来存储您最喜欢的命令行工具并将其添加到您的路径中。
步骤3、卸载程序:
1. 在您已复制 PSEXEC 的机器上打开管理命令提示符。
2.运行以下命令。
psexec \\remotecomputername msiexec /x /q pathtotheMSIfile
远程计算机的 UNC 路径可以使用 NetBIOS 名称或 FQDN。MSI 文件的路径必须相对于您要卸载软件的计算机。同样,UNC 路径在这里很适用。/x 表示卸载,/q 表示无需用户输入(安静地)即可卸载。
专业提示:如果您使用 psexec \*,它将在域中的每台计算机上运行!
您可以再次使用该 WMIC 命令来确保它已经消失
wmic /output:c:\userName.txt /user:MYUSERNAMEHERE /node:"THEIRCOMPUTERNAME" product get name