【问题标题】:PowerShell and ActiveDirectory module - Find Users that are not members of particular groupsPowerShell 和 ActiveDirectory 模块 - 查找不属于特定组的用户
【发布时间】:2013-02-27 12:06:59
【问题描述】:

上周,我第一次接触到 PowerShell 和 ActiveDirectory。我希望能够找到不是管理员或域管理员的用户列表。

到目前为止,我知道如何使用以下命令/语句获取所有 ActiveDirectory 用户的所有属性:

Get-ADUser -Filter * -Properties *

我想做的是只打印当前 ActiveDirectory 用户的用户名——不是管理员或域管理员。

这是我正在尝试做的一些伪代码/Powershell 代码:

$users = Get-ADUser -Filter * -Properties *
foreach($u in $users){
    if ($u isn't an administrator OR $u isn't a domain administrator){ 
        Write-Host "User Name:" $u.Name
    }
}

当我运行Get-ADUser -Filter * -Properties * 命令时,我看到每个用户的MemberOf 属性——我认为这可能是一个线索。我还从通过 Google 找到的各种来源听说过 AdminCount(有没有叫 DomainAdminCount 的东西?)。

有人特别要求我不要为 ActiveDirectory 使用 PowerShell 扩展 - 尽管各种消息来源都说拥有这个扩展会更容易。

我花了大约 2 个小时来测试各种语句组合,但我的新手 PowerShell 状态对我没有太大帮助。我将不胜感激任何帮助,以及任何反馈背后的一些明确解释。

【问题讨论】:

  • 我了解检查域管理员组成员资格的要求,但不知道您所说的管理员是什么意思 - AD 中不存在此类组(默认情况下不存在)。

标签: powershell active-directory


【解决方案1】:

这是一项非常简单的任务,您无需先检索所有用户并循环:

$DomainsAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName
Get-ADUser -Filter { -not (memberof -eq $DomainsAdminsDn) }
# OR
Get-ADUser -LDAPFilter "(!(memberof=$DomainsAdminsDn))"

您可以对任何其他组执行相同操作。

编辑: 反向查询,返回在组中的帐户。顺便说一句,这行不通:

Get-ADUser -Filter { memberof -ne $DomainsAdminsDn }

它将跳过不属于任何其他组的所有帐户,而不是默认帐户。

【讨论】:

  • 感谢 BartekB 的帮助 :) 我还调整了下面的代码,它得到了我所希望的:## 这个变量获取所有域管理员用户 $DomainsAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName ## 此变量获取所有属于管理员的用户 $AdministratorsDn = (Get-ADGroup 'Administrators').DistinguishedName ## 此行将获取所有非“域管理员”或“管理员”的用户" Get-ADUser -Filter {(memberOf -ne $AdministratorsDn) -and (memberOf -ne $DomainsAdminsDn)}
  • 如何获得群组CN=ROLE_AGENT,OU=PROFILES,OU=NSI PRODUCTION,DC=xxxxx,DC=net
  • @Kiquenet 因为你已经有 DN,你可以移动到Get-ADUser -LDAPFilter 部分并用你的字符串替换$DomainsAdminsDn
【解决方案2】:

我使用了大家贡献的一点点,并对其进行了调整。我需要找出谁不属于一个群体,我只需要他们的名字。让我知道这是否对您有所帮助。

$Internet_Users = Get-ADGroup -Filter {Name -like "Internet_Users" }
Get-ADUser -Filter { -not (memberof -eq $Internet_Users) -and (enabled -eq "True" -and objectclass -eq "user")} |Select Name | Export-CSV "C:\Users\YOURNAME\Documents\Enabled_Users_Without_Internet_Users_Group.csv"  

【讨论】:

    【解决方案3】:

    借助 BartekB 的一些非常有用的反馈,我能够实现以下解决方案:

    ## This variable gets all the users that are Domain Administrators
    $DomainsAdminsDn = (Get-ADGroup 'Domain Admins').DistinguishedName
    
    ## This variable gets all the users that are Administrators
    $AdministratorsDn = (Get-ADGroup 'Administrators').DistinguishedName
    
    ## This line will get all the users that are not "Domain Administrators" or "Administrators"
    Get-ADUser -Filter {(memberOf -ne $AdministratorsDn) -and (memberOf -ne $DomainsAdminsDn)}
    

    对于最后一行,我想组合这两个变量以使过滤更加具体(即查找不是管理员或域管理员的用户)。我不得不花大约 10 分钟的时间来寻找与 && 运算符等效的 PowerShell - 这与我的怀疑一样。

    【讨论】:

      【解决方案4】:

      事实证明,“域用户”是经过特殊处理的,因此如果您尝试查找不在该组中的人,它将无法正常工作。

      基于以下代码: http://powershell.org/wp/forums/topic/find-users-not-in-a-group/

      Import-Module ActiveDirectory
      $users = Get-ADUser -Filter {Enabled -eq $true} -Properties MemberOf, PrimaryGroup
      $dugDn = (Get-ADGroup "Domain Users").DistinguishedName
      foreach ($user in $users)
      {
          Write-Verbose "Working on $($user.Name)"
          $groups = $user.MemberOf, $user.PrimaryGroup
          if ($groups -NotContains $dugDn)
          {
              Write-Host "$($user.SamAccountName) not in the domain users group"
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-17
        • 1970-01-01
        • 2011-08-21
        • 2012-10-30
        • 1970-01-01
        • 1970-01-01
        • 2016-07-18
        • 2014-12-27
        相关资源
        最近更新 更多