希望有人可以帮助解决我在运行我创建的 powershell 脚本时遇到的以下错误。它在没有问题之前工作正常。
“请求的操作未执行,因为用户尚未通过身份验证。”
所以该帐户是可以正常使用的,我可以在 PS 中正常运行各种命令。该脚本在另一台用户机器上运行良好,没有问题。我可以使用
-ResourceContextServer
参数解决错误,但这并不理想,因为这是 gui 的一部分,它将查看域 A 之上的另一个域。所以我使用它不会在出现提示时搜索域 B。
谷歌给了我很少的见识,尽管我发现了我尝试过的东西并且它工作了一段时间然后我又得到了同样的东西
$PSDefaultParameterValues.Add('Get-ADPrincipalGroupMembership:Server',"$((Get-ADDomain).PDCEmulator)")
导致问题的命令是
Get-ADPrincipalGroupMembership
自己在 PS 中运行我得到相同的结果。运行其他命令没问题。
其他人看到这个并有解决方案。当我想更新脚本并测试它时,这让事情变得很困难。
谢谢
这是让它工作的一种方法。如果您在某个时候请求凭据,您可以多次使用相同的
$Creds
变量,这确实有效
$username = TheUserToFindGroupd
$OperatorUsername = YourOperatorOrScriptUsername
$Creds = Get-Credential -Credential $OperatorUsername
Get-ADPrincipalGroupMembership $username -Credential $Creds | Get-ADGroup -Properties * | select name
它将针对当前连接的 DC 进行身份验证和运行(我已经尝试过,其中为 DC1 指定 -server 有效,但 DC2 和 DC3 没有)
我可能更喜欢的两种替代方法是从 Get-ADUser 获取 MemberOf 字段。在我的测试中,它得到了所有组,除了
Domain Users
.
Get-ADUser $username -Properties MemberOf | Select-Object -ExpandProperty MemberOf | Get-ADGroup | Select-Object Name
和
foreach ($Group in (Get-ADUser $username -Properties MemberOf | Select -ExpandProperty MemberOf)) { write-host ($Group.Split(",")[0]).Split("=")[1] }
它们都比
Get-ADPrincipalGroupMembership
快,但第一个更干净(即使它在 DC 上会更密集)。
我们通过调用
Get-AdPrincipalGroupMembership
重新传递凭证来完成这项工作。每次重新认证有点痛苦,但如果你缓存凭证,它会更容易。
如果您在管理员帐户上禁用了帐户委托,这是一种安全最佳做法,则会发生此问题。这意味着您的用户帐户凭据无法转发到第二台计算机。当我跑
Set-Aduser joe.bloggs -accountnotdelegated $false
这对我有用 (30.08.22):
按照 2ps 解决方案,明确运行 powershell 作为您的域帐户(即使已经使用它登录..)并从那里运行 Get-AdPrincipalGroupMembership ...禁用委派没有任何区别。
我的问题是我已经登录超过 2 天,所以我的身份验证已过期。注销并重新登录解决了它。