Public/New-ADSIComputer.ps1

function New-ADSIComputer
{
<#
    .SYNOPSIS
        function to create a new computer
     
    .DESCRIPTION
        function to create a new computer
     
    .PARAMETER Name
        Specifies the property Name
     
    .PARAMETER DisplayName
        Specifies the property DisplayName
     
    .PARAMETER Description
        Specifies the property Description
     
    .PARAMETER Enable
        Specifies you want the account enabled after creation.
        By Default the account is disable
     
    .PARAMETER Passthru
        Specifies if you want to see the object created after running the command.
     
    .PARAMETER Credential
        Specifies if you want to specifies alternative credentials
     
    .PARAMETER DomainName
        Specifies if you want to specifies alternative DomainName
     
    .EXAMPLE
        New-ADSIComputer FXTEST01 -Description 'Dev system'
     
        Create a new computer account FXTEST01 and add the description 'Dev System'
     
    .EXAMPLE
        New-ADSIComputer FXTEST01 -enable
     
        Create a new computer account FXTEST01 inside the default Computers Organizational Unit and Enable the account
 
    .EXAMPLE
        New-ADSIComputer FXTEST01 -Description 'Dev system'
     
        Create a new computer account FXTEST01 and add the description 'Dev System'
     
    .EXAMPLE
        New-ADSIComputer FXTEST01 -Passthru
     
        Create a new computer account FXTEST01 and return the object created and its properties.
     
    .NOTES
        Francois-Xavier.Cat
        LazyWinAdmin.com
        @lazywinadm
        github.com/lazywinadmin
     
    .LINK
        https://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.computerprincipal(v=vs.110).aspx
#>

    
    [CmdletBinding(SupportsShouldProcess = $true)]
    param
    (
        [Parameter(Mandatory = $true)]
        $Name,

        [String]$DisplayName,

        [String]$Description,

        [switch]$Passthru,

        [Switch]$Enable,

        [Alias("RunAs")]
        [System.Management.Automation.PSCredential]
        [System.Management.Automation.Credential()]
        $Credential = [System.Management.Automation.PSCredential]::Empty,
        
        [String]$DomainName
    )
    
    BEGIN
    {
        Add-Type -AssemblyName System.DirectoryServices.AccountManagement
        
        # Create Context splatting
        $ContextSplatting = @{ ContextType = "Domain" }
        
        IF ($PSBoundParameters['Credential']) { $ContextSplatting.Credential = $Credential }
        IF ($PSBoundParameters['DomainName']) { $ContextSplatting.DomainName = $DomainName }
        
        $Context = New-ADSIPrincipalContext @ContextSplatting
    }
    PROCESS
    {
        TRY
        {
            
            if ($PSCmdlet.ShouldProcess($Name, "Create Computer"))
            {
                $newObject = New-Object -TypeName System.DirectoryServices.AccountManagement.ComputerPrincipal -ArgumentList $Context
                $newObject.SamAccountName = $Name
                
                IF ($PSBoundParameters['Enable'])
                {
                    $newObject.Enabled = $true
                }
                
                IF ($PSBoundParameters['Description'])
                {
                    $newObject.Description = $Description
                }
                
                IF ($PSBoundParameters['DisplayName'])
                { $newObject.DisplayName }
                
                # Push to ActiveDirectory
                $newObject.Save($Context)
                
                IF ($PSBoundParameters['Passthru'])
                {
                    $ContextSplatting.Remove('ContextType')
                    Get-ADSIComputer -Identity $Name @ContextSplatting
                }
            }
        }
        CATCH
        {
            Write-Error $Error[0]
        }
        
    }
    END
    {
        
    }
}