Public/Get-ADSIComputer.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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.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($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]
        }
    }
}