Public/New-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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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
    {
        
    }
}