在我的 Powershell 脚本中,为什么管理员用户看到 AD 用户对象的 "enabled" 属性值,而另一个"admin"用户看不到?



我有一个PowerShell脚本,该脚本调用Get-Aduser从Active Directory创建用户对象列表。该脚本处理具有逻辑的用户列表,该逻辑评估了用户启用属性(布尔值(的价值。

我发现的是,当脚本作为域用户管理员运行时,对启用属性的评估起作用。但是,当我将其作为替代域管理员运行(即,我通过复制管理员用户创建的帐户(将脚本无法评估启用属性。确实,这就像该属性不存在。

这是说明问题的代码。

$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"
   }
 }

如果我将其作为用户管理员运行,则代码为列表中启用的广告用户输出"启用"。但是,如果我将其作为备用管理用户(通过复制管理员创建的一个(运行,则根本没有输出。

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

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

脚本输出

 True
 True
 False
 True
 ... etc

,但是如果我将其作为备用管理用户运行,它将没有输出。

您是否知道为什么是这种情况?

问题将在您创建的alt da帐户的权限中存在。

  1. 确认它已在ADUC安全选项卡中的userAccountControl设置读取/写入。
  2. 确保没有任何OU GPO会阻碍它看到这些设置。通过检查适用于原始DA帐户的OU GPO
  3. 来确认这一点

此命令的PowerShell部分没有问题。您可以通过启动ADUC来确认这一点。

为什么不使用…

Get-Member

... cmdlet找出那里有哪些属性。这毫无意义,因为如果您要克隆默认的管理员帐户,那么所有私有都应该在那里。如果不是您需要的话。

没有真正的理由使用明确的if或forloop来获得这些结果。您可以做到这一点。

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

也看一下…

search-adaccount

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

@drew是正确的,问题是userAccountControl,但是我在ADUC中要查询的"安全"选项卡上没有找到属性。我找到了一篇文章,描述了如何使用ADSI(https://briandesmond.com/blog/delegating-enable-disable-account-account-rights-in-active-directory/(设置此文章。按照这些说明(为不同版本的AD提供津贴(,我添加了Alt Admin用户,并授予了对UserAccessControl的阅读访问。现在该脚本按预期工作。

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

相关内容

最新更新