我正在尝试获取本地计算机上具有每个用户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");
所有这些都会导致异常。有人可以告诉我该怎么说吗?
您没有正确使用SearchQuery
;要指定条件,您必须提供full查询字符串,或使用将查询分开进行的SearchQuery
构造函数:
SearchQuery(String, String)
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);
[ManagementObjectSearcher(String)
在我们的案例ManagementObjectSearcher(String)
]中基于指定的查询检索管理对象的集合。
var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_UserAccount WHERE Disabled=False");
:调用指定的WMI查询并返回结果集合。
添加参考中的ManagementObjectSearcher
SELECT * FROM Win32_UserAccount
或
userSearcher.Get()