Set-AduserExistingGroupMembership.ps1

Function Set-ADUserExistingGroupMembership {
    
    <#
    .SYNOPSIS
    Update Existing AD User Group Membership
     
    .DESCRIPTION
    This Cmdlet copies AD User group Membership from an existing AD User and applies it to another existing AD User.
     
    .PARAMETER UsernameToCopyMembershipFrom
    AD Username to Copy Group Membership from
     
    .PARAMETER UsernameToCopyMembershipTo
    AD UserName to Copy Group information To
     
    .EXAMPLE
    Get-PETADUserGroupInfo -UsernameToCopyGroupMembershipFrom TestUSer01 -UsernameToCopyGroupMembershipTo TestUser02 -verbose
     
    .EXAMPLE
     
    Import-CSV C:\Scripts\AdUserInfo.csv | Get-PETADUserGroupMembership -verbose
     
    .NOTES
    This Cmdlet will copy all groups from exsisting (UsernameToCopyGroupInfoFrom) to and existing user (UsernameToCopyGroupInfoTo).
    the cmdlet requires the ActiveDirectory module and will attempt to import it.
    #>

     
        [cmdletbinding(SupportsShouldProcess=$True,ConfirmImpact='high')]
        param(
        [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Mandatory=$true)]
        [String]$UsernameToCopyGroupMembershipFrom,
        [parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true,Mandatory=$true)]
        [String[]]$UsernameToCopyGroupMembershipTo
        )
        BEGIN{
            Write-Verbose "[$((get-date).TimeOfDay.ToString()) BEGIN ] Starting: $($MyInvocation.MyCommand)"
            Write-Verbose "[$((get-date).TimeOfDay.ToString()) BEGIN ] PSVersion = $($PSVersionTable.PSVersion)"
            Write-Verbose "[$((get-date).TimeOfDay.ToString()) BEGIN ] OS = $((Get-CimInstance win32_OperatingSystem).Caption)"
            Write-Verbose "[$((get-date).TimeOfDay.ToString()) BEGIN ] User = $($env:userdomain)\$($env:USERNAME)"
            $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
            $IsAdmin = [System.Security.Principal.WindowsPrincipal]::new($id).IsInRole('administrators')
            Write-Verbose "[$((get-date).TimeOfDay.ToString()) BEGIN ] Is Admin = $IsAdmin"
            
            
        }#BEGIN
    
    
        PROCESS{
                $GroupInfo = Get-ADPrincipalGroupMembership -Identity $UsernameToCopyGroupMembershipFrom | Select-Object -ExpandProperty Name
                Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS ]: Total groups found is $($GroupInfo.count)" 
                $GroupInfo = $GroupInfo -ne "Domain Users"
                
                    foreach ($Group in $GroupInfo){
                    try {
                            if ($PSCmdlet.ShouldProcess($($Group)))
                            {
                            Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS ]: Adding user $($UsernameToCopyGroupMembershipTo) to $($Group)"     
                            Add-ADGroupMember $Group  -Members $UsernameToCopyGroupMembershipTo 
                            }
                        }#Try
                    Catch [Microsoft.ActiveDirectory.Management.ADException]{
                            Write-Verbose "[$((get-date).TimeOfDay.ToString()) PROCESS (Catch)]: $($UsernameToCopyGroupMembershipTo) Already exists in $($Group)"
                        }#Catch
                    Catch{
                        $ErrorMessage = $_.Exception.Message
                        Write-Output $ErrorMessage
                        }#Catch
                    }#FOREACH
        }#PROCESS
    
        END{
            #LEFT BLANK
        }#END
    
    }#Function
 

# SIG # Begin signature block
# MIIIWAYJKoZIhvcNAQcCoIIISTCCCEUCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUYyPAxdCfT5mYjjjSHFzJ1CD8
# g/agggXTMIIFzzCCBLegAwIBAgIKI+alEgAAAAAMTzANBgkqhkiG9w0BAQUFADBA
# MRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFjAUBgoJkiaJk/IsZAEZFgZwZXRlcnMx
# DzANBgNVBAMTBlJvb3RDQTAeFw0xNjA1MjUyMjQ5MjVaFw0yMTA1MjQyMjQ5MjVa
# MIGIMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFjAUBgoJkiaJk/IsZAEZFgZwZXRl
# cnMxFzAVBgNVBAsTDlBldGVycyBPYmplY3RzMQ4wDAYDVQQLEwVVc2VyczEUMBIG
# A1UECxMLQ29udHJhY3RvcnMxGDAWBgNVBAMTD1NoaWhhbiBQaWV0ZXJzejCCASIw
# DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALqjlVFhz2Jmijj+v6bTi4EiAOJA
# Dx9InjUSh3aN06eELeKMRjqc0B33dk04kkq6Rs0dy8vvvrmQlE/Etoqx+GRJiy6K
# JC34FLQI85YxHrGNhLM54EZwRHX+iDsXsmZvEQqDaUHRC9QzT77fYVQOe8AxojLh
# zilyIHIU2Ec+N0chNX77I5e76K6L6fZa92R7lWz+fbeJm6IJIXSpukGTSFPMvLcg
# LnflfnnDBDCsfHecY9ZFPEH8LLs+LzV5ta5w8fVFt1IzqAHmiXWEx70t2n1jqvpx
# zx4ykBjKORHaVV8IzfiCrICbGl1/082lcdlO/1GbJaJlicTRzFPtoW47/AECAwEA
# AaOCAoAwggJ8MDwGCSsGAQQBgjcVBwQvMC0GJSsGAQQBgjcVCIH7wgPJxmWHoZ0j
# hYmgYYPNihR3gqzMRYXVsj8CAWQCAQIwEwYDVR0lBAwwCgYIKwYBBQUHAwMwDgYD
# VR0PAQH/BAQDAgeAMBsGCSsGAQQBgjcVCgQOMAwwCgYIKwYBBQUHAwMwHQYDVR0O
# BBYEFGyYZLBdWxaiOaYrLW+7v7Vzvy1XMB8GA1UdIwQYMBaAFKJt615sTsvKB+Vm
# TET+s9YiUd9lMIHKBgNVHR8EgcIwgb8wgbyggbmggbaGgbNsZGFwOi8vL0NOPVJv
# b3RDQSxDTj1QRVRNVUxTRVIwMTYsQ049Q0RQLENOPVB1YmxpYyUyMEtleSUyMFNl
# cnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9cGV0ZXJzLERD
# PWxvY2FsP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFz
# cz1jUkxEaXN0cmlidXRpb25Qb2ludDCBuQYIKwYBBQUHAQEEgawwgakwgaYGCCsG
# AQUFBzAChoGZbGRhcDovLy9DTj1Sb290Q0EsQ049QUlBLENOPVB1YmxpYyUyMEtl
# eSUyMFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9cGV0
# ZXJzLERDPWxvY2FsP2NBQ2VydGlmaWNhdGU/YmFzZT9vYmplY3RDbGFzcz1jZXJ0
# aWZpY2F0aW9uQXV0aG9yaXR5MDEGA1UdEQQqMCigJgYKKwYBBAGCNxQCA6AYDBZ2
# LXNwaWV0ZXJAcGV0ZXJzLmxvY2FsMA0GCSqGSIb3DQEBBQUAA4IBAQAYLtV27syc
# YJgAMf07HQJSZ39O5AZL7NrxBifKpXGryK5imi1zKOaJCYVY1KDrfu+gCLW2IYuB
# TeSjqg2HHgM1p3dgS+uufcPasgBJsYnsFSqlTOnezu2IH87d73YuhlpRfR2r649A
# 0QXvwYe4aLgENyy6k9N0bkqMWEFxlShIOVY/adlU+qKOP2sPBUC5p9STJ909IYtQ
# mN+3iybKr0HMiECBPBH/HxlVqjtIu7PtqYwEBr3socadSmhHp+HwhB74xJ3coegU
# CBeRHMpQNlBuu41fmAGExDunJsaCg87n6Kyx9qMguICj7sjU1IAHuouFuRx6UKac
# lRhThY4m3CDxMYIB7zCCAesCAQEwTjBAMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwx
# FjAUBgoJkiaJk/IsZAEZFgZwZXRlcnMxDzANBgNVBAMTBlJvb3RDQQIKI+alEgAA
# AAAMTzAJBgUrDgMCGgUAoHgwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkq
# hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGC
# NwIBFTAjBgkqhkiG9w0BCQQxFgQUBzHYuARJKCcy+sEglEXwhWcHkwIwDQYJKoZI
# hvcNAQEBBQAEggEAplnPLZNt/AiUuLZwGlQm5enNvfjymyI4Fo8ehoalDZ5hbFWp
# LkZxGPtYDCQl2VAozfnpiFN6hSczWZ1VEmmPUYssJEs4uzQx0JFkFDr5PGXlbuKJ
# xKQtwr0HX5WKjjzY8lcHRW1LsZgHwfREQVdgvQAG8tyl28BlkO69weefquvXGwgW
# +zPN/nzmCokVteWHnLdKXCd8Lt1ap4lxKGS2DrQ17zJXN4E9kOkO/uc4u/0LK/7H
# GmoURV4KD/8KzhY/hlu6SoN5aMebHRAkGP+MfgrTcOgQMHhYb3Zsknad8zbiVNya
# IP1TXXqTiB9AGpEyxuS7QlUHSlP9zduNB++61A==
# SIG # End signature block