TL;DR:我有一个CSV格式的用户列表,其中包含必须从其中删除的~500和~ 200访问组。访问组通常不包含用户,而是包含用户组,我需要一种方法来找到为用户提供指定访问权限的组,然后将其删除。
这是上一个问题的后续问题。正如我所指出的,如果用户不是指定组的成员,则解决方案将不起作用。这非常有意义,但意味着脚本实际上并不非常适合我的用例。让我解释一下:
客户端的设置是拥有一个访问组(范围:域本地),它提供对给定资源(例如网络共享)的权限;以及用户组(范围:Global),其中包含具有访问权限的用户。在许多情况下,组是嵌套的,就像俄罗斯的嵌套玩偶一样,我见过的最糟糕的例子是六层嵌套。(是的,这一点应该解决,但这超出了本问题的范围。)
理想情况下,这些组的名称除了前缀外都是相同的,如下所示:
- 访问组:AG公司
- 用户组:UG
不幸的是,这些组的命名一直不太一致。结果是我不能简单地更改前缀并相信结果是正确的。更重要的是,即使不是这样,嵌套娃娃问题也意味着我可能无法找到所有赠款用户访问特定资源的组。
如果问题是相反的,我可以使用带有-recursive参数的get-adgroupmember-实际上,这就是列表最初的组装方式。
我的直觉是,我需要反转我的原始脚本,从AD组开始,而不是从用户帐户开始,但我真的不知道如何从那里继续。
编辑:一位同事建议我修改我的原始脚本如下:
$users = import-csv usersfromgroups.csv
Foreach ($user in $users){
$group = Get-ADGroupMember $user.group | Get-ADGroup
remove-adgroupmember -identity $group -members $users.username #-WhatIf
}
返回以下内容。
Get-ADGroup : Cannot find an object with identity: 'CN=User Name,OU=OU1,OU=OU2,DC=OU3,DC=OU4' under: 'DC=OU3,DC=OU4'.
At line:3 char:42
+ $group = Get-ADGroupMember $user.group | Get-ADGroup
+ ~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (CN=USER,DC=OU3,DC=OU4:ADGroup) [Get-ADGroup], ADIdentityNotFoundException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException,Microsoft.ActiveDirectory.Management.Commands.GetADGroup
Remove-ADGroupMember : Cannot validate argument on parameter 'Identity'. The argument is null. Provide a valid value for the argument, and then try running the command again.
At line:5 char:34
+ remove-adgroupmember -identity $group -members $users.username #-Wh ...
+ ~~~~~~
+ CategoryInfo : InvalidData: (:) [Remove-ADGroupMember], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.RemoveADGroupMember>
CSV看起来像这样(尽管完全匿名):
username,group
User1,Group1
User1,Group2
User1,Group3
User2,Group4
User2,Group1
User3,Group2
User4,Group5
1条答案
按热度按时间ffscu2ro1#
Get-ADGroupMember $user.group
是否可能返回一个用户,然后管道Get-ADGroup
无法处理该用户,导致$group变量未定义/为空,从而导致错误:不确定这是否正确,但试图帮助