在上周,我第一次遇到了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状态并没有给我太多帮助。我将非常感谢任何帮助,以及任何反馈背后的一些明确解释。
答案 0 :(得分:3)
这是非常简单的任务,您不需要先检索所有用户并循环:
$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 }
它将跳过所有不属于默认组的任何其他组成员的帐户。
答案 1 :(得分:1)
我使用了一些你们每个人贡献的东西,并进行了调整。我需要找出谁不是一个群体,我只需要他们的名字。如果这有助于你,请告诉我。
$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"
答案 2 :(得分:0)
通过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等同于&&运营商 - 就像我怀疑的那样。
答案 3 :(得分:0)
结果表明"域用户"是专门处理的,所以如果你试图找到那个不在那个群体中的人,它就不会工作。
基于以下代码: 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"
}
}