.NET WMI SCCM应用程序安装(remotel)

时间:2018-03-22 15:28:52

标签: .net wmi wmi-query sccm

我试图通过.Net应用程序的WMI查询远程安装/卸载SCCM应用程序。

我的代码如下:

    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行显示:它获得了请求(不是专门卸载而是查询),执行检测,发现应用程序和检测到的应用程序部署。

记录完之后,它什么也没做。它几乎就像它没有得到“卸载”#34;或"安装"一部分。 **

任何人都有处理此事的经验吗?我知道还有其他的解决方案,但我试图在自己的工作。我可以通过powershell做到这一点,但如果可能的话,我宁愿不这样做。

1 个答案:

答案 0 :(得分:0)

我最终使它开始工作。我有一个生产应用程序,可以帮助我加快服务器场上的Windows更新。其中一部分是重试应用程序和更新安装。

using (var searcher = new ManagementObjectSearcher(string.Format(@"\\{0}\root\CCM\ClientSDK", strComputerName, "SELECT * FROM CCM_Application"))
foreach (var obj in searcher.Get())
    if (((string)obj["Name"]).Equals(strApplicationName))
        using (var mInv = new ManagementClass(string.Format(@"\\{0}\root\CCM\ClientSDK", strComputerName), "CCM_Application", null))
        {
            ManagementBaseObject inParams = mInv.GetMethodParameters("Install");
            inParams["EnforcePreference"] = (uint)0;
            inParams["Id"] = obj["Id"];
            inParams["IsMachineTarget"] = obj["IsMachineTarget"];
            inParams["IsRebootIfNeeded"] = false;
            inParams["Revision"] = obj["Revision"];
            mInv.InvokeMethod("Install", inParams, null);
        }