Public/Add-ADUserToGroup.ps1
function Add-ADUserToGroup { [CmdletBinding(SupportsShouldProcess)] Param ( [Parameter(Mandatory,ValueFromPipeline)] [string]$GroupDN, [Parameter(Mandatory)] [object]$User, [Parameter(Mandatory)] [string]$Domain, [AllowNull()] [object]$Creds ) begin { $NoNeed = @() $Added = @() $Failed = @() } process { $UserName = $User.Name $GroupName = ($GroupDN -Split "=|,")[1] -Replace "\\|\#","" Write-Verbose "Checking if $UserName already exists in $GroupName..." if ($Creds) { $Members = Get-ADGroupMember $GroupDN -Server $Domain -Credential $Creds | Select-Object -ExpandProperty Name } else { $Domain = Get-ADGroup $GroupDN -Server $ADGlobalCatalog | Get-ADDomainName $Members = Get-ADGroupMember $GroupDN -Server $Domain | Select-Object -ExpandProperty Name } if ($Members -contains $UserName) { Write-Verbose "$UserName is already a member of $GroupName" $NoNeed += $GroupDN } else { try { if ($Creds) { Add-ADGroupMember $GroupDN -Members $User -Server $Domain -Credential $Creds } else { $Domain = Get-ADGroup $GroupDN -Server $ADGlobalCatalog | Get-ADDomainName Add-ADGroupMember $GroupDN -Members $User -Server $Domain } Write-Verbose "Successfully added $UserName to $GroupName group." $Added += $GroupDN } catch { Write-Warning "FAILED to add $UserName to $GroupName group." Write-Warning $_.InvocationInfo.ScriptName Write-Warning $_.InvocationInfo.Line Write-Warning $_.Exception.Message $Failed += $GroupDN } } } end { return [Tuple]::Create($NoNeed,$Added,$Failed) } } |