【问题标题】:Running WMI query on Win32_ScheduledJob returns no results在 Win32_ScheduledJob 上运行 WMI 查询不返回任何结果
【发布时间】:2015-02-26 14:07:00
【问题描述】:

我正在尝试使用 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。

【问题讨论】:

    标签: c# wmi wmi-query


    【解决方案1】:

    Win32_ScheduledJob 类在内部使用 AT 协议,从 Windows 8Windows Server 2012 开始,该协议将被弃用 >。作为第一步,默认情况下禁用AT 协议。如果协议被禁用,例如在Win32_ScheduledJob 对象上调用Create 方法将失败并出现错误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
    

    【讨论】:

    • 谢谢。我想如果我阅读了所有课程,我会看到你放在这里的内容。看起来最安全的方法是使用之后提示的 Task Scheduler API
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多