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 |