【发布时间】:2018-03-22 15:28:52
【问题描述】:
我正在尝试让 SCCM 应用程序通过 .Net 应用程序的 WMI 查询远程安装/卸载。
我的代码如下:
Dim wmiLoc As ManagementScope = New ManagementScope("\\" & Target & "\root\ccm\ClientSDK", Options)
Dim wmiProcPath As ManagementPath = New ManagementPath("CCM_Application")
Dim mc As ManagementClass = New ManagementClass(wmiLoc, wmiProcPath, Nothing)
Dim inParams As ManagementBaseObject = mc.GetMethodParameters("Install")
inParams("EnforcePreference") = "0"
inParams("Id") = ThisID
inParams("IsMachineTarget") = ThisIMT
inParams("IsRebootIfNeeded") = "False"
inParams("Priority") = "High"
inParams("Revision") = ThisRev
Dim outParams As ManagementBaseObject = mc.InvokeMethod("Install", inParams, Nothing)
Console.WriteLine("Job Id: {0}, Return: {1}", outParams("JobId"), outParams("ReturnValue"))
我想你可以假设 Rev#、ID 和 IsMachineTarget 是正确的,因为我是从我之前从机器查询的信息中提取它们的。
** 当我将此特定请求发送到机器时,它仅将其记录到 CCM/Logs AppDiscovery 中。它分 4 行显示:它收到了请求(不是专门用于卸载,而是查询)、执行检测、发现的应用程序和检测到的应用程序部署。
在它记录这个之后,它什么也不做。就好像它没有得到它的“卸载”或“安装”部分。 **
谁有处理这个问题的经验?我知道还有其他解决方案,但我正在尝试自己工作。我可能可以通过 powershell 做到这一点,但如果可能的话,我宁愿不这样做。
【问题讨论】:
-
据我所知,应用程序的全部意义在于安装完全基于对检测方法的评估。 Atm 无法强制安装,如果检测到它将永远不会安装(用户语音请求更改此设置,但状态为“已计划”)
-
我不确定我理解你的意思。如果严格来说“可用”应用程序,您可以通过 WMI 通过 powershell 执行此操作。你提到如果它被检测到它永远不会被安装?在“发现”中检测到?
-
啊,好吧,我误解了你的意图。我说的是使用“检测方法”应用程序来确定安装是否成功。如果需要应用程序,这是确定是否在第一次安装之前安装它的唯一检查,但对于可用的应用程序,这是不正确的。如果你让它在 ps 中与 wmi 一起使用,但是我看不出这在 C# 中也不起作用,那么 wmi 的使用应该没有区别。人们有时会使用 sccm 的包装类,但正常的 wmi 实现应该仍然有效