在Win32_ScheduledJob上运行WMI查询不返回任何结果

时间:2015-02-26 14:07:00

标签: c# wmi wmi-query

我正在尝试使用WMI查询远程计算机以获取其计划任务(具体为两个),但查询不返回任何内容。我试过在我的本地机器上运行它仍然没有返回任何结果。但如果我查询Win32_LogicalDisk它返回3结果。对我来说,WMI在本地工作,它只会为计划作业返回任何内容。我发现这很奇怪,因为当我从命令提示符运行schtasks时,我会回到大约25个任务(可能更多)以下代码并不奇怪。我已经注释掉了我尝试过的东西,现在它被设置为在本地运行我的机器。

public Win32_ScheduledJob QueryTask(string systemName, string p2)
{
    var job = new Win32_ScheduledJob();
    var connectionOptions = new ConnectionOptions()
    {
        Impersonation = ImpersonationLevel.Impersonate
    };
    var computer = string.Format(@"\\{0}\root\CIMV2", systemName);
    //var scope = new ManagementScope(computer);
    //scope.Connect();
    //var str = "SELECT * FROM Win32_LogicalDisk";
    var str = "SELECT * FROM Win32_ScheduledJob";
    var query = new ManagementObjectSearcher(str);
    var tasks = query.Get();
    //TODO search for Name==p2 and set its elements to job
    var count = tasks.Count;
    tasks.Dispose();
    return job;
}

知道为什么我没有得到任何结果吗?哦,我忘了提到我曾经使用过query.Get(??? ManagementOO ???)并订阅了4个事件,它调用已完成,状态为NoError,但从不调用Progress,ObjectReady或ObjectPut。

1 个答案:

答案 0 :(得分:2)

Win32_ScheduledJob类在内部使用AT协议,绑定到弃用 Windows 8 Windows Server开始2012 。作为第一步,默认情况下禁用AT协议。如果禁用该协议,例如,在Create对象上调用Win32_ScheduledJob方法将失败,并显示错误0x8。您可以通过添加以下注册表项来重新启用AT协议:

Key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration 
Name: EnableAt 
Type: REG_DWORD
Value: 1

您可能需要重新启动机器才能使设置生效。

Resource: Win32_ScheduledJob class

  

尝试没有成功......即使重启后......

供参考:

==>schtasks|find /C "TaskName"
59