gpt4 book ai didi

Powershell set-aduser 不更新 AD?

转载 作者:行者123 更新时间:2023-12-03 00:00:22 25 4
gpt4 key购买 nike

我正在使用 Powershell 来处理 Active Directory,虽然我可以得到一些东西,但我在进行更改时遇到了麻烦。

我不认为这是权限问题,因为我实际上没有看到为我设置的测试条目有错误,如果我尝试更改不同的条目,我确实会看到。

我正在使用 psexec(因为 runas 没有命令行密码参数)以不同的域用户身份运行 Powershell,因为我自己的帐户无权更改 AD。在 Powershell 中执行 whoami 确认我以正确的用户身份运行。

我所做的基本上归结为:

PS C:\Temp> get-aduser -identity Xyzzy.Test -properties surname
DistinguishedName : CN=Xyzzy Test,OU=Users,DC=company,DC=com
Enabled : True
GivenName : Xyzzy
Name : Xyzzy Test
ObjectClass : user
ObjectGUID : b1d2a3ff-3ee4-56b7-bc89-12ad345678a9
SamAccountName : Xyzzy.Test
SID : S-1-5-21-9999999999-888888888-77777777-66666
Surname : Test
UserPrincipalName : Xyzzy.Test@company.com

PS C:\Temp> set-aduser -identity Xyzzy.Test -surname "xyzzy"

然后,当我再次运行相同的 get-aduser 时,我发现姓氏根本没有改变。

由于 set-aduser 没有产生错误,因此它似乎无声无息地失败了。

什么可能导致这不起作用但不报告错误?

最佳答案

这可能不是您特定问题的原因,但过去对我来说一直是个问题,因此至少可以帮助其他人。

AD cmdlet 会自动确定要使用的域 Controller 。从一个命令到另一个命令,它们不一定使用相同的 DC。这意味着您可能会更新一个 DC,然后进行查询,该查询会命中另一个尚未将更改复制到它的 DC。

出于这个原因,我建议在处理某个操作时,您希望在某种程度上具有原子性,通常您将在单个函数或脚本中与 AD 进行的所有交互,请确保明确使用相同的 DC。

这样做的方法是使用 -Server范围。

因为继续指定 -Server 很烦人每次通话,您都可以使用 $PSDefaultParameterValues 以此目的。

$PSDefaultParameterValues = @{
"*-AD*:Server" = "MyDC"
}

可能更好,在运行时找到一个 DC:

$PSDefaultParameterValues = @{
"*-AD*:Server" = Get-ADDomainController -Writable -Discover -Service ADWS -ForceDiscover | Select-Object -ExpandProperty Name
}

不要使用脚本块(就像我在编辑之前那样),因为它会在每次调用时重新运行该块,这每次都会为您提供不同的 DC(正是您想要避免的)。

关于Powershell set-aduser 不更新 AD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31693509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com