【问题标题】:Check if user is a member and remove检查用户是否是成员并删除
【发布时间】:2019-06-27 22:39:39
【问题描述】:

我需要一个脚本来验证多个用户是否是 AD 组列表的成员,如果是,则将其删除。我有这样的东西:

Import-Module ActiveDirectory

$users = Get-Content -Path "C:\users.txt"
$groups = Get-Content -Path "C:\groups.txt"

foreach ($group in $groups) {
    foreach ($user in $users) {
        $members = Get-ADGroupMember -Identity $group -Recursive |
                   Select -ExpandProperty SamAccountName

        if ($members -contains $user) {
            Remove-ADGroupMember -Identity $group.Name -Members $user.SamAccountName -Confirm:$false
            Write-Host "$user has been removed from $group"
        } else {
            Write-Host "$user is not a member of $group"
        }
    }
}

但我收到以下错误:

Remove-ADGroupMember:无法验证参数“身份”上的参数。这 参数为空。为参数提供一个有效值,然后尝试运行 再次命令。 在行:12 字符:44 + 删除-ADGroupMember -Identity $group.Name -Members $user.SamAccount ... + ~~~~~~~~~~~ + CategoryInfo : InvalidData: (:) [Remove-ADGroupMember], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.RemoveADGroupMember

【问题讨论】:

  • 错误消息指出Cannot validate argument on parameter 'Identity'. The argument is null. 验证$group.name(也许尝试使用$group 代替?
  • 如果你想删除它们,你可以使用Remove-ADPrincipalGroupMembership。您不必事先检查。 ;-) 当您添加 -ErrorAction SilentlyContinue 时,如果一个帐户不是组的成员,您将不会收到错误。

标签: powershell active-directory


【解决方案1】:

猜测您正在调整一些预先存在的代码,因为您在此行中有未在代码中定义的属性:

Remove-ADGroupMember -Identity $group.Name -Members $user.SamAccountName -Confirm:$false

修复简单,只需将$group.Name 更改为$group 并将$user.SamAccountName 更改为$user

Remove-ADGroupMember -Identity $group -Members $user -Confirm:$false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    相关资源
    最近更新 更多