我有一个Powershell脚本,该脚本调用Get-ADUser从Active Directory创建用户对象列表。该脚本使用逻辑来处理用户列表,该逻辑会评估用户的Enabled属性(布尔值)的值。
我发现的是,当脚本以域用户Administrator身份运行时,对Enabled属性的评估有效。但是当我以备用域管理员(即通过复制管理员用户创建的帐户)运行它时,脚本无法评估Enabled属性。确实,这就像该属性不存在。
这是说明问题的代码。
$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"
}
}
如果我以用户Administrator身份运行,则代码为列表中已启用的AD用户输出“已启用”。但是,如果我以备用admin用户(通过复制Administrator创建的用户)运行它,则根本没有任何输出。
为进一步说明问题,如果我以管理员身份运行此代码
$users | ForEach-Object{$_.Enabled}
脚本输出
True
True
False
True
... etc
但是如果我以备用管理员用户身份运行,它将不会输出任何内容。
你知道为什么会这样吗?
答案 0 :(得分:1)
存在您创建的Alt DA帐户权限的问题。
userAccountControl
设置具有读/写功能。此命令的PowerShell部分没有问题。 您可以通过以每个用户身份启动ADUC并检查随机用户设置来确认这一点,更多内容将显示为灰色。
答案 1 :(得分:0)
为什么不只使用…
Get-Member
... cmdlet找出那里的属性。这没有什么意义,因为如果您要克隆默认的管理员帐户,则所有privs都应该存在。如果不是您所需要的。
没有真正的理由使用显式的if或ForLoop获得这些结果。您可以这样做。
(Get-ADUser -Filter "*" -SearchBase $SearchDN.DistinguishedName) |
Select-Object -Property SamAccountName, Enabled |
Sort-Object -Property Enabled |
Format-Table -AutoSize
还可以看看...
... cmdlet,然后在两个帐户上对其进行测试。
答案 2 :(得分:0)
@Drew是正确的,表明问题是userAccountControl
,但是我在ADUC中查询的OU的安全性选项卡上找不到该属性。我找到了一篇文章,描述了如何使用ADSI(https://briandesmond.com/blog/delegating-enable-disable-account-rights-in-active-directory/)进行设置。按照这些说明(允许使用不同版本的AD),我添加了alt admin用户,并为userAccessControl授予了READ访问权限。现在脚本可以按预期工作。
但是,我仍然困惑为什么这是必要的。我的备用管理员帐户属于已在OU上分配了权限的所有组。 (正如我所说,该帐户是管理员的副本)。无论出于何种原因,此权限都不会应用到该用户。