【问题标题】:How to check if a user is in a particular group from a particular OU in Powershell如何检查用户是否在 Powershell 中特定 OU 的特定组中
【发布时间】:2011-05-27 20:51:07
【问题描述】:

这是我的问题。

我有多个代表物理位置的 OU,所以它的结构是这样的。

COMPANY.COM\LOC1\Users(user1、user2、user3 等...) COMPANY.COM\LOC2\Users(user4、user5、user6 等...)

每个位置都有一个用户应该属于的组,我需要审核以确保用户属于该组。

OU LOC1,我需要确保 OU LOC1 中的所有用户(user1、user2、user3)都属于安全组 LOC1_GRP,并输出不属于安全组的用户。

【问题讨论】:

  • 到目前为止您尝试过什么?您想使用哪种库/snapin?

标签: powershell active-directory


【解决方案1】:

Get-QADUser 呢?您可以过滤所有用户,例如不属于特定组的用户,如下所示:

get-qaduser -searchroot 'company.com/LOC1/Users' | ? {[string]$_.memberof -notmatch 'LOC1_GRP'}

【讨论】:

  • 我相信 .memberof 将是一组组 DN,这会使事情变得复杂。我认为 {[string]$_.memberof -notmatch 'LOC1_GRP'} 可能无需通过所有组 DN 进行交互来检查匹配项。
  • @mjolinor:我认为你是对的。我已经更正了答案。谢谢
  • @mjolinor:确定我们需要notmatch,不确定它是一个数组。
  • 我相信它是否是一个数组将取决于用户是否是多个组的成员。根据我的经验,一个用途只属于一个安全组是非常罕见的。
  • @empo,你真的测试过吗?如果在 OU 中创建用户而没有分配到任何组,这将不起作用。只是因为在这种情况下 memberof 是空的。
【解决方案2】:

应该这样做:

$groupname = "cn=group-blarr,ou=loc1,dc=company,dc=com"

Get-ADUser -filter {memberof -ne $groupname} -ResultPageSize 0 -SearchBase "ou=loc1,dc=company,dc=com" -Searchscope 2

【讨论】:

    【解决方案3】:

    只是为了完成(并纠正)第一个答案:

    1. 查询 Active-Directory 的 Quest Cmdlet 从 PowerShell V1.0 开始可用,但在 PowerShell V2.0 (W2K8 R2) 中,Microsoft 实现了自己的(只需导入 ActiveDirectory 模块)
    2. 注意 Active-Directory 中的memberOf 属性,因为即使用户是域用户组(primaryGrouID 中的代码)的成员,创建用户时它也只是空的,这就是我反转测试的原因.

    PS C:\> get-adobject -SearchBase "ou=loc1,dc=company,dc=com"  -filter {objectclass -eq "user"} -properties memberof | where {!($_.memberof -match "mygroup")}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-03
      • 2018-12-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多