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