Public/Remove-ADSIUser.ps1

function Remove-ADSIUser
{
<#
.SYNOPSIS
    Function to delete a User Account
 
.DESCRIPTION
    Function to delete a User Account
 
.PARAMETER Identity
    Specifies the Identity of the User.
 
    You can provide one of the following properties
        DistinguishedName
        Guid
        Name
        SamAccountName
        Sid
        UserPrincipalName
     
    Those properties come from the following enumeration:
        System.DirectoryServices.AccountManagement.IdentityType
 
.PARAMETER Credential
    Specifies the alternative credential to use.
    By default it will use the current user windows credentials.
 
.PARAMETER DomainName
    Specifies the alternative Domain.
    By default it will use the current domain.
 
.PARAMETER Recursive
    Specifies that any child object should be deleted as well
    Typically you would use this parameter if you get the error "The directory service can perform the requested operation only on a leaf object"
    when you try to delete the object without the -recursive param
     
    Typically used when you have Exchange/ActiveSync in your domain, some users happens to have sub child items.
     
.EXAMPLE
    Remove-ADSIUser -identity fxtest02
 
    This command will Remove the account fxtest02 from the current domain
     
.EXAMPLE
    Remove-ADSIUser -identity fxtest02 -whatif
     
    This command will emulate removing the account fxtest02
     
.EXAMPLE
    Remove-ADSIUser -identity fxtest02 -credential (Get-Credential)
 
    This command will Remove the account fxtest02 using the alternative credential specified
 
.EXAMPLE
    Remove-ADSIUser -identity fxtest02 -credential (Get-Credential) -domain LazyWinAdmin.local
 
    This command will Remove the account fxtest02 using the alternative credential specified in the domain lazywinadmin.local
 
.EXAMPLE
    Remove-ADSIUser -identity fxtest02 -recursive
 
    This command will Remove the account fxtest02 and all the child objects.
     
.NOTES
    Francois-Xavier.Cat
    LazyWinAdmin.com
    @lazywinadm
    github.com/lazywinadmin
     
.LINK
    https://msdn.microsoft.com/en-us/library/System.DirectoryServices.AccountManagement.UserPrincipal(v=vs.110).aspx
#>

    [CmdletBinding(SupportsShouldProcess = $true)]
    PARAM (
        [parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true)]
        $Identity,

        [Alias("RunAs")]
        [System.Management.Automation.PSCredential]
        [System.Management.Automation.Credential()]
        $Credential = [System.Management.Automation.PSCredential]::Empty,

        [String]$DomainName,

        [Switch]$Recursive
    )
    
    BEGIN
    {
        Add-Type -AssemblyName System.DirectoryServices.AccountManagement
        
        # Create Context splatting
        $ContextSplatting = @{ }
        IF ($PSBoundParameters['Credential']) { $ContextSplatting.Credential = $Credential }
        IF ($PSBoundParameters['DomainName']) { $ContextSplatting.DomainName = $DomainName }
        
        $Context = New-ADSIPrincipalContext @ContextSplatting -contexttype Domain
    }
    PROCESS
    {
        TRY
        {
            # Not Recursive
            if (-not $PSBoundParameters['Recursive'])
            {
                if ($pscmdlet.ShouldProcess("$Identity", "Remove Account"))
                {
                    (Get-ADSIUser -Identity $Identity @ContextSplatting).Delete()
                }
            }
            
            # Recursive
            if ($PSBoundParameters['Recursive'])
            {
                if ($pscmdlet.ShouldProcess("$Identity", "Remove Account and any child objects"))
                {
                    (Get-ADSIUser -Identity $Identity @ContextSplatting).GetUnderlyingObject().deletetree()
                }
            }
        }
        CATCH
        {
            Write-Error $Error[0]
        }
    }
}