WMI查询以获取已启用的用户帐户。我的WHERE子句有什么问题?

问题描述 投票:-1回答:2

我正在尝试获取本地计算机上具有每个用户SID值的未禁用用户帐户的列表。我无法使用DirectoryEntry类进行此操作,因为返回的用户在ObjectSecurity字段中都为NULL。所以我尝试使用ManagementObjectSearcher

SelectQuery sQuery = new SelectQuery("Win32_UserAccount"); );
var searcher = new ManagementObjectSearcher(sQuery);

返回的用户拥有我需要的信息,但是此查询为我提供了禁用的帐户。我想添加一个WHERE子句来解决这个问题,但是我做错了。

我已经尝试过

new SelectQuery("Win32_UserAccount WHERE NOT Disabled");
new SelectQuery("Win32_UserAccount WHERE Disabled='False'");
new SelectQuery("Win32_UserAccount WHERE Disabled=False");

所有这些都会导致异常。有人可以告诉我该怎么说吗?

c# .net wmi
2个回答
0
投票

您没有正确使用SearchQuery;要指定条件,您必须提供full查询字符串,或使用将查询分开进行的SearchQuery构造函数:

SearchQuery(String, String)

OR

SearchQuery(String, String)

但是,您可以通过使用直接接受查询字符串的var query = new SelectQuery("SELECT * FROM Win32_UserAccount WHERE Disabled=False"); var searcher = new ManagementObjectSearcher(query); 构造函数来简化代码:

var query = new SelectQuery("Win32_UserAccount", "Disabled=False");
var searcher = new ManagementObjectSearcher(query);

0
投票
  • [ManagementObjectSearcher(String)在我们的案例ManagementObjectSearcher(String)]中基于指定的查询检索管理对象的集合。

  • var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_UserAccount WHERE Disabled=False"); :调用指定的WMI查询并返回结果集合。

  • 添加参考中的ManagementObjectSearcher

SELECT * FROM Win32_UserAccount

userSearcher.Get()
© www.soinside.com 2019 - 2024. All rights reserved.