Удаление пользователя из определенной группы в определенном подразделении

Привет ребята у меня есть это

      function Invoke-AdDesktopGGroup {
 [CmdletBinding(SupportsShouldProcess)]
 param($ADGroup)

 #$OUPath = "OU=SCPA,DC=souche,DC=ban"
 $user = Get-ADUser -SearchBase "OU=SCPA,DC=soucy,DC=lan" -Filter * -Properties MemberOf
 $user | foreach {
 if ($PSCmdlet.ShouldProcess($_.Name, 'Remove Group')) {
 $_ | Remove-ADGroupMember -Members $_ -Confirm $false
 }
 }
}

И я стремлюсь удалить каждого пользователя в подразделении SCPA, у которого есть группа с именем Desktop Global. Я пишу для этого следующую команду: Invoke-AdDesktopGGroup -ADGroup 'Desktop Global' -Whatif

Ребята, вы можете мне помочь, я вроде как застрял.

2 ответа

Итак, что-то вроде этого?

      function Invoke-AdDesktopGroup {
[CmdletBinding(SupportsShouldProcess)]
    Param(
        [Parameter(Mandatory=$true,
                   ValueFromPipeline=$true,
                   ValueFromPipelineByPropertyName=$true)]
        [string[]]$ADGroup
    )
    Begin {

         
         $ADGroup_Splat = @{
             SearchBase = 'OU=SCPA,DC=soucy,DC=lan'
             Filter     = '*'
             Properties = 'MemberOf'
         }
         $ADUsers = Get-ADUser @ADGroup_Splat
     

    }
    Process{
        
        # Remove-ADGroupMember -Identity $ADGroup -Members $ADUsers -Confirm:$false # I believe this is all you would need instead of a foreach loop
        foreach ($User in $ADUsers) {
            if ($PSCmdlet.ShouldProcess($User.Name, 'Remove Group')) {

                Remove-ADGroupMember -Identity $ADGroup -Members $User.Name -Confirm:$false

            }

        }

    }

}

У меня нет пользователя, на котором я могу это протестировать, но он должен работать. Обратите внимание на встроенный комментарий; Я считаю, что это может занять множество пользователей, посмотрев синтаксис для Remove-ADGroupMember.

Спасибо за вашу помощь, мне удалось заставить его работать вот так

      function Invoke-AdDesktopGroup {
[CmdletBinding(SupportsShouldProcess)]
    Param($ADGroup)
    Begin {

         
         $ADGroup_Splat = @{
             SearchBase = 'OU=SCPA,DC=soucy,DC=lan'
             Filter     = '*'
             Properties = 'MemberOf'
         }
         $ADUsers = Get-ADGroupMember -Identity $ADGroup
     

    }
    Process{
        
       foreach ($User in $ADUsers) {
            if ($PSCmdlet.ShouldProcess($User.Name, 'Remove Group')) {

                Remove-ADGroupMember -Identity $ADGroup -Members $User.Name -Confirm:$false

            }

        }

    }

}

Похоже, что параметр, который вы мне дали, не сработал. Powershell не удалось преобразовать строковый параметр в параметр Active Directory. Но тем не менее я смог заставить его работать благодаря вашему вкладу. Большое спасибо!

Другие вопросы по тегам