获取本地启用用户账户的WMI查询WHERE子句错误排查
解决Win32_UserAccount过滤未禁用账户的WQL查询问题
嗨,我来帮你搞定这个WMI查询的坑!你之前的写法报错,是因为WQL(WMI查询语言)里对布尔类型属性的判断规则和C#不一样——Win32_UserAccount的Disabled属性是用整数来表示状态的:0对应未禁用,1对应已禁用,不能直接用False或者NOT Disabled这种写法。
正确的查询写法
直接用数值对比就能解决问题,两种写法都可以:
- 直接筛选未禁用账户(推荐)
SelectQuery sQuery = new SelectQuery("Win32_UserAccount WHERE Disabled = 0"); var searcher = new ManagementObjectSearcher(sQuery);
- 排除已禁用账户
SelectQuery sQuery = new SelectQuery("Win32_UserAccount WHERE NOT Disabled = 1");
额外优化:只获取本地账户
如果你的需求是本地计算机的账户,还可以加上LocalAccount = 1的条件,避免返回域账户:
SelectQuery sQuery = new SelectQuery("Win32_UserAccount WHERE Disabled = 0 AND LocalAccount = 1");
这样查询出来的结果就是你需要的:本地未禁用、带有SID的用户账户列表啦。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

