Public/Get-ADSIComputer.ps1

function Get-ADSIComputer
{
<#
    .SYNOPSIS
        Function to retrieve a Computer in Active Directory
     
    .DESCRIPTION
        Function to retrieve a Computer in Active Directory
     
    .PARAMETER Identity
        Specifies the Identity of the computer
             
        You can provide one of the following:
            DistinguishedName
            Guid
            Name
            SamAccountName
            Sid
     
        System.DirectoryService.AccountManagement.IdentityType
        https://msdn.microsoft.com/en-us/library/bb356425(v=vs.110).aspx
     
    .PARAMETER Credential
        Specifies alternative credential
        By default it will use the current user windows credentials.
 
    .PARAMETER DomainName
        Specifies the alternative Domain.
        By default it will use the current domain.
     
    .EXAMPLE
        Get-ADSIComputer -Identity 'SERVER01'
     
        This command will retrieve the computer account SERVER01
     
    .EXAMPLE
        Get-ADSIComputer -Identity 'SERVER01' -Credential (Get-Credential)
     
        This command will retrieve the computer account SERVER01 with the specified credential
     
    .EXAMPLE
        Get-ADSIComputer TESTSERVER01 -credential (Get-Credential) -domain LazyWinAdmin.local
     
        This command will retrieve the account TESTSERVER01 using the alternative credential specified in the domain lazywinadmin.local
     
    .EXAMPLE
        $Comp = Get-ADSIComputer -Identity 'SERVER01'
        $Comp.GetUnderlyingObject()| select-object *
     
        Help you find all the extra 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(DefaultParameterSetName="All")]
    param ([Parameter(Mandatory=$true,ParameterSetName="Identity")]
        [string]$Identity,
        
        [Alias('RunAs')]
        [System.Management.Automation.Credential()]
        $Credential = [System.Management.Automation.PSCredential]::Empty,
        $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($Identity)
            {
                [System.DirectoryServices.AccountManagement.ComputerPrincipal]::FindByIdentity($Context, $Identity)
            }
            ELSE{
                $ComputerPrincipal = New-object -TypeName System.DirectoryServices.AccountManagement.ComputerPrincipal -ArgumentList $Context
                $Searcher = new-object System.DirectoryServices.AccountManagement.PrincipalSearcher
                $Searcher.QueryFilter = $ComputerPrincipal

                $Searcher.FindAll()
            }
        }
        CATCH
        {
        $Error[0]
        }
    }
}