关于Windows:在我的Powershell脚本中,为什么管理员用户看到AD用户对象的”已启用”属性值,而另一个”管理员”用户却看不到?

In my Powershell script, why does the administrator user see the “enabled” property value for AD user object but another “admin” user doesn't?

我有一个Powershell脚本,该脚本调用Get-ADUser从Active Directory创建用户对象列表。该脚本使用逻辑来处理用户列表,该逻辑评估用户的Enabled属性的值(布尔值)。

我发现的是,当脚本以域用户Administrator身份运行时,对Enabled属性的评估有效。但是,当我以备用域管理员(即通过复制管理员用户创建的帐户)运行它时,脚本无法评估Enabled属性。确实,就好像该属性不存在。

这是说明问题的代码。

1
2
3
4
5
6
7
8
$users = Get-ADUser -Filter"*" -SearchBase"OU=Customers,OU=STORE1,DC=SOME,DC=COMPANY"

foreach($u in $users){
   if($u.Enabled -eq $true)
   {
      write-host"Enabled"
   }
 }

如果以管理员用户身份运行它,则代码将为列表中已启用的AD用户输出"已启用"。但是,如果我以备用admin用户(通过复制Administrator创建的用户)运行它,则根本没有任何输出。

为进一步说明问题,如果我以管理员身份运行此代码

1
 $users | ForEach-Object{$_.Enabled}

脚本输出

1
2
3
4
5
 True
 True
 False
 True
 ... etc

但是如果我以备用管理员用户身份运行它,它什么也不会输出。

您是否知道为什么会这样?


存在您创建的Alt DA帐户权限的问题。

  • 确认它具有ADUC安全选项卡中的userAccountControl读/写设置。
  • 确保没有阻止其查看这些设置的OU GPO。通过检查应用于原始DA帐户的OU GPO来确认这一点
  • 此命令的PowerShell部分没有问题。
    您可以通过以每个用户身份启动ADUC并检查随机用户设置来确认这一点,更多内容将显示为灰色。


    @Drew是正确的,问题出在userAccountControl,但是我在ADUC中查询的OU的安全性选项卡上找不到该属性。我找到了一篇文章,描述了如何使用ADSI进行设置(https://briandesmond.com/blog/delegating-enable-disable-acable-rights-in-active-directory/)。按照这些说明(允许使用不同版本的AD),我添加了alt admin用户,并为userAccessControl授予了READ访问权限。现在该脚本可以按预期工作。

    但是,我仍然感到困惑,为什么这是必要的。我的备用管理员帐户属于已在OU上分配了权限的所有组。 (正如我所说,该帐户是管理员的副本)。无论出于何种原因,都不会将此权限应用于该用户。


    为什么不只使用a€|

    1
    Get-Member

    ... cmdlet找出那里的属性。这没有什么意义,因为如果您要克隆默认的管理员帐户,则所有privs都应该存在。如果不是您所需要的。

    没有真正的理由使用显式的if或ForLoop获得这些结果。您可以执行此操作。

    1
    2
    3
    4
    (Get-ADUser -Filter"*" -SearchBase $SearchDN.DistinguishedName) |
    Select-Object -Property SamAccountName, Enabled |
    Sort-Object -Property Enabled |
    Format-Table -AutoSize

    也看看a€|

    Search-ADAccount

    ... cmdlet,然后在两个帐户上对其进行测试。