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 |
脚本输出
1 2 3 4 5 | True True False True ... etc |
但是如果我以备用管理员用户身份运行它,它什么也不会输出。
您是否知道为什么会这样?
存在您创建的Alt DA帐户权限的问题。
此命令的PowerShell部分没有问题。
您可以通过以每个用户身份启动ADUC并检查随机用户设置来确认这一点,更多内容将显示为灰色。
@Drew是正确的,问题出在
但是,我仍然感到困惑,为什么这是必要的。我的备用管理员帐户属于已在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,然后在两个帐户上对其进行测试。