2012-03-19 89 views
0

在PowerShell中,我已经知道如何使用DirectoryEntry和DirectorySearcher获取某个OU中的用户列表。这种方法的结果大部分是我在AD中查找的内容,但通过使用WMI查询Win32_UserAccount来获取相同的信息似乎更容易。我更喜欢这个类的属性,并且SID已经是正确的字符串格式(在第一种方法中,它需要从一个十六进制字节数组转换为字符串)。如何通过OU过滤Win32_UserAccount结果

我在使用Win32_UserAccount时遇到的问题是我无法找到一种方法来通过OU进行过滤。我可以通过域名和名称成功过滤,并且已经尝试了几次WQL猜测,但似乎无法找到OU过滤器的任何语法。我的大多数尝试都会导致“无效查询”。下面是一个可行的查询的例子:

$user = gwmi Win32_UserAccount -filter "name='somebody' AND domain='mydomain'" 

如果没有办法通过OU来过滤这个话,我会回去使用的DirectoryEntry /的DirectorySearcher。

回答

1

鉴于Win32_Account类没有与LDAP相关的属性,所以我认为你很不幸运。

您当然可以使用它来获取所需格式的SID,除了目录搜索以获取LDAP相关数据。

+0

这是我即将做,从的DirectorySearcher通过OU得到用户的列表,并他们使用Win32_UserAccount(从Win32_Account继承其他属性)并从那里获取其余的信息。对于WMI来说,这将是一个简单的单一调用,并循环遍历结果,但是如果OU属性不可用,那么我想它不能被它过滤。 – Bratch 2012-03-20 17:17:56

1

您是否熟悉Quest的免费AD cmdlet?

http://www.quest.com/powershell/activeroles-server.aspx

可以过滤基于OU的用户和获得各种格式的SID:

PS> Get-QADUser SizeLimit 0 -SearchRoot <OU_DistinguishedName>' | fl *sid* 

objectSid : 0105000000000005150000006753F33372134F3FF673476FF4023001 
Sid  : S-1-5-21-54781788-1045369324-1866953526-501 
(...) 
+0

我不认为这将部署在服务器上有任何附加扩展。它的工作原理和我一样,如果我坚持使用LDAP调用,我甚至会找到一个将SID转换为字符串格式的函数。 | fl *很适合获取对象属性。 – Bratch 2012-03-20 18:11:01

+0

您不必将其安装在服务器上,您的管理工作站即可执行此操作。 – 2012-03-21 15:30:02

+0

我在测试时从我的工作站运行它们,但脚本已部署并计划从另一台计算机运行。我会将链接转发给该机器的管理员。我的脚本没有工作,但他可能对cmdlet可以执行的其他操作感兴趣。 – Bratch 2012-03-21 16:30:21