我有一个powershell脚本,它调用Get-ADUser从Active Directory创建用户对象列表。该脚本使用计算用户的Enabled属性(布尔值)的值的逻辑来处理用户列表。
我发现,当脚本以域用户管理员身份运行时,对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"
}
}如果我以用户管理员的身份运行它,代码将为列表中已启用的AD用户输出" enabled“。但是,如果我以备用管理员用户(通过复制管理员创建的用户)的身份运行它,则根本得不到任何输出。
为了进一步说明这个问题,如果我以管理员身份运行此代码
$users | ForEach-Object{$_.Enabled}脚本输出
True
True
False
True
... etc但是,如果我以备用管理员用户身份运行它,则不会输出任何内容。
你知道为什么会这样吗?
发布于 2019-06-28 10:20:26
您创建的Alt DA帐户的权限将存在问题。
userAccountControl设置进行了读/写操作。的OU GPO进行确认
此命令的PowerShell部分没有问题。你可以通过以每个用户的身份启动ADUC来确认这一点,并检查随机的用户设置,更多的内容将灰显。
发布于 2019-06-28 09:55:47
为什么不直接使用…
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,并在两个帐户上使用它进行测试。
发布于 2019-06-28 11:35:32
@Drew说问题出在userAccountControl上是正确的,但是我没有在安全选项卡上找到我在ADUC中查询的OU的属性。我找到了一篇文章,描述了如何使用ADSI (https://briandesmond.com/blog/delegating-enable-disable-account-rights-in-active-directory/)进行设置。按照这些说明(考虑到不同版本的AD),我添加了我的alt管理员用户,并授予了userAccessControl的读访问权限。现在脚本可以按预期工作了。
然而,我仍然不明白为什么这是必要的。我的备用管理员帐户属于OU上已向其分配权限的所有组。(正如我所说的,该帐户是Administrator的副本)。无论出于何种原因,此权限都不会应用于此用户。
https://stackoverflow.com/questions/56799712
复制相似问题