![WMI 查询发现组策略缺少驱动器号](https://linux22.com/image/682369/WMI%20%E6%9F%A5%E8%AF%A2%E5%8F%91%E7%8E%B0%E7%BB%84%E7%AD%96%E7%95%A5%E7%BC%BA%E5%B0%91%E9%A9%B1%E5%8A%A8%E5%99%A8%E5%8F%B7.png)
我正在构建一个组策略,以应用于我组织内的部分用户。这部分用户在其 Active Directory 对象上未设置主目录,而其他用户则分配了 I:\ 驱动器。
我需要找到一个 WMI 查询,它将允许用户配置 GPO 应用于没有 I:\ 驱动器的用户。
我可以很容易地找到它的逆函数:
Select * From Win32_LogicalDisk Where DeviceID = 'I:'
但是如果我将其设为 WHERE DeviceID <> 'I:\',它会返回 C:、D: 和其他映射驱动器。
我想过用这样的方式查询用户资料:
select RoamingPath from Win32_UserProfile where RoamingPath <> '\\*'
但是,这会返回系统帐户和本地管理员配置文件的许多结果,而不是登录用户的结果。
我读到可以直接查询 AD,但是下面的命令给了我一个“无效类”错误,我不知道它是否适用于登录的用户:
select * from ds_user where ADSIPath = LDAP://OU=CA,DC=global,DC=opus AND DS_homeDirectory=’*’
我认为理想的解决方法是使用 Win32_LogicalDisk 计算驱动器总数,使用第二个查询获取 I:\ 驱动器的数量(1 或 0),然后从第一个结果中减去第二个结果。如果结果 = 第一个查询,则我得到了一组用户。不过,到目前为止,还没有找到在 GPO wmi 过滤器中执行此操作的语法。
答案1
我已经确定,完全按照我在问题中所定义的方式完成这项工作实际上是不可能的。
我遇到的两个最佳选择是:
- 倒置 WMI 过滤器- 为每个用户/PC创建一个环境变量,该变量根据所需逻辑产生结果。然后使用常规 WMI 查询来过滤该环境变量。
- 计划的 PowerShell 查询- 正如 Yanick 在评论中所建议的那样,创建一个 PowerShell 查询,根据所需逻辑(即 homeDrive 属性为空)过滤用户,然后将这些用户帐户添加到一个组中,然后可以将其用于 GPO 上的安全过滤。然后安排此 PowerShell 在 LAN 服务器上重复运行。
我在我的环境中选择了选项#2。