我们正在尝试查询 Active Directory 以获取属于某个组的所有计算机的列表,以及操作系统属性等信息。我们无法获得该组每个成员的结果。
环境详情:
- 多个域控制器,运行 Windows Server 2003 和 2008 R2。
- 多个域,域之间存在信任关系。
- 从 Windows Server 2008 R2 计算机运行 AD 查询。
- 查询 AD 的帐户是“本地管理员帐户,域成员,在该服务器上具有管理员权限”。
- 我们获悉,一些机器“通过信任关系成为该组的成员”。
我们当前的测试组“Group-99”有两台机器:FOO10 和 FOO11。
当我们查询组成员时,我们收到预期的结果,即组中所有机器的列表:
PS > dsquery group -name "Group-99" | dsget group -members
"CN=FOO10,OU=Domain Controllers,DC=activedirdev,DC=widgetco,DC=com"
"CN=FOO11,OU=Portland,OU=Domain Controllers,DC=activedirdev,DC=widgetco,DC=com"
然后,我们查询 DNSHostName 和 OperatingSystem,但只能收到两台机器中的一台的结果:
PS > dsquery * -filter "(&(objectClass=Computer)(objectCategory=Computer)(sAMAccountName=FOO11$))" -attr sAMAccountName operatingSystem
sAMAccountName operatingSystem
FOO11$ Windows Server 2008 R2 Standard
PS > dsquery * -filter "(&(objectClass=Computer)(objectCategory=Computer)(sAMAccountName=FOO10$))" -attr sAMAccountName operatingSystem
PS >
我们都不是 Active Directory 专家,所以我们不确定问题出在哪里。无法调整 Active Directory 设置。
您能帮助我们弄清楚如何获取我们需要的信息吗,或者是否有可能获取这些信息?
后续澄清:我们理想的结果是发出一个查询,该查询将返回所有群组成员的结果,无论他们位于哪个域。例如:
PS > dsquery (stuff)
CN operatingSystem
FOO10 Windows Server 2008 R2 Standard
FOO11 Windows Server 2003
答案1
您正在查询的对象似乎存在于另一个域中。当您运行 DSQuery 时未指定要联系的服务器或域,您将自动绑定到您登录的域。此对象可能位于另一个域中。
要获取丢失的对象,请尝试
dsquery * -filter "(&(objectClass=Computer)(objectCategory=Computer)(sAMAccountName=FOO10$))" -attr sAMAccountName operatingSystem -d activedirdev.widgetco.com
答案2
正如 HopelessN00b 已经指出的那样,拥有 commonNameFOO10
并不一定意味着 sAMAccountName 也是如此FOO10$
(尽管很有可能)。
要确定是否是这种情况,请直接检索对象,而不是搜索它:
dsget computer "CN=FOO10,OU=Domain Controllers,DC=activedirdev,DC=widgetco,DC=com" -samid