Public/ActionActiveDirectory.ps1

Function ActionActiveDirectory {
    [CmdletBinding()]
    param (
        [Parameter(ValueFromPipeline = $true, Mandatory = $false, Position = 0)] $Object,
        [string] $Name,
        [PSAutomator.ActionAD] $Action,
        [Object] $ActionValue
    )
    $Trigger = switch ($Object.Trigger.Trigger) {
        OrganizationalUnit {
            $Users = Get-ActiveDirectoryUsersByOU -OrganizationalUnit $Object.Trigger.Value
        }
        GroupMembership {
            $Group = Get-ADGroup -Identity $Object.Trigger.Value
            if ($Group) {
                $Users = Get-ADGroupMember -Identity $Group
            }
        }
    }
    $CountUsers = Get-ObjectCount -Object $Users
    Write-Color -Text '[+] ', 'Action ', $Name, ' on ', $CountUsers, ' objects based on trigger ', $Object.Trigger.Trigger, ' with value ', $Object.Trigger.Value -Color DarkGreen, White, DarkGreen, White, DarkGreen, White, DarkGreen, White, DarkGreen -StartSpaces 4
    foreach ($User in $Users) {
        $Result = switch ( $Action ) {
            AccountAddGroupsSpecific {
                $CommandOutput = Add-ADUserGroups -User $User -Groups $ActionValue
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountDisable {
                $CommandOutput = Set-ADUserStatus -User $User -Option Disable
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountEnable {
                $CommandOutput = Set-ADUserStatus -User $User -Option Enable
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountHideInGAL {
                $CommandOutput = Set-ADUserSettingGAL -User $User -Option Hide
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountShowInGAL {
                $CommandOutput = Set-ADUserSettingGAL -User $User -Option Show
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountRemoveGroupsAll {
                $CommandOutput = Remove-ADUserGroups -User $User -All
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountRemoveGroupsSecurity {
                $CommandOutput = Remove-ADUserGroups -User $User -GroupCategory Security
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountRemoveGroupsDistribution {
                $CommandOutput = Remove-ADUserGroups -User $User -GroupCategory Distribution
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountRemoveGroupsDomainLocal {
                $CommandOutput = Remove-ADUserGroups -User $User -GroupScope DomainLocal
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountRemoveGroupsGlobal {
                $CommandOutput = Remove-ADUserGroups -User $User -GroupScope Global
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountRemoveGroupsUniversal {
                $CommandOutput = Remove-ADUserGroups -User $User -GroupScope Universal
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountRemoveGroupsSpecific {
                $CommandOutput = Remove-ADUserGroups -User $User -Groups $ActionValue
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountRename {
                $CommandOutput = Set-ADUserName -User $User -Option $ActionValue.Where -TextToAdd $ActionValue.Text
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
            AccountSnapshot {
                $CommandOutput = Get-ADUserSnapshot -User $User -XmlPath $ActionValue
                Out-ActionStatus -CommandOutput $CommandOutput -User $User -Name $Name
            }
        }
    }
    return $Object
}