在尝试回答这个问题时,我遇到了困扰我一段时间的问题,但我一直无法找到答案。
以下脚本块将列出本地管理员组的所有成员的名称。
$group = [ADSI]"WinNT://./Administrators"
@($group.Invoke("Members")) | foreach {$_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)}
但是,它只会列出名称,而不会列出其他属性。
我相当确定Members
我可以提取其他属性,但我不明白我将如何确定其他属性是什么。
我不一定需要知道该项目的其他属性,这更多的是我将如何找到它们的问题。
(如果这有点含糊,我深表歉意,我在这一切方面都是自学成才的,我很清楚我可能会在错误的树上吠叫和/或经常犯可怕的错误。)
问题是您正在处理一个 COM 对象,而这些对象似乎没有提供一种在 PowerShell 中向您展示所有内容的方法。
您还可以在此处查看不同(C#)线程上的类似问题:https ://stackoverflow.com/questions/10615019/get-property-names-via-reflection-of-an-com-object
请在此处查看可用属性:
http://msdn.microsoft.com/en-us/library/aa705950(v=VS.85).aspx
以及与您的问题类似的示例:
http://social.technet.microsoft.com/Forums/windowsserver/en-US/b4d51781-e304-45b1-a7b1-c21b62263540/adsi-local-group-enum-from-fancy-powershell-to-simple-foreach- rewrite?forum=winserverpowershell
由于您已经获得了组的成员名称列表,因此要获取成员的详细信息,我将再次重新查询,除了针对单个用户而不是组。
扩展@Jacob 的想法。当您枚举组的成员时,只返回字符串对象,而不是 AD 用户对象。因此,唯一可用的属性是字符串属性(即长度等)。您需要使用名称作为 -identity 参数再次查询 AD 以检索用户属性。
在 AD 中,您可以执行以下操作:
我不能代表 WinNT 的代码