Public/New-ADSIUser.ps1
function New-ADSIUser { <# .SYNOPSIS Function to create a new User .DESCRIPTION Function to create a new User .PARAMETER SamAccountName Specifies the SamAccountName parameter .PARAMETER AccountPassword Specifies the password parameter .PARAMETER Enabled Specifies if the user need to be enabled on creation. Default is $False. .PARAMETER GivenName Specifies the GivenName parameter .PARAMETER SurName Specifies the Surname parameter .PARAMETER UserPrincipalName Specifies the UserPrincipalName parameter. .PARAMETER DisplayName Specifies the DisplayName parameter. .PARAMETER Name Specifies the Name parameter. .PARAMETER PasswordNeverExpires Specifies if the Password Never Expires .PARAMETER UserCannotChangePassword Specifies if the User Cannot Change Password .PARAMETER PasswordNotRequired Specifies if the Password is Not Required .PARAMETER Credential Specifies the alternative credential to use. By default it will use the current user windows credentials. .PARAMETER DomainName Specifies the alternative Domain where the user should be created By default it will use the current domain. .PARAMETER Passthru Specifies if you want to see the object created after running the command. .EXAMPLE PS C:\> New-ADSIUser -SamAccountName "fxtest04" -Enabled -AccountPassword (Read-Host -AsSecureString "AccountPassword") -Passthru .EXAMPLE PS C:\> New-ADSIUser -SamAccountName "fxtest04" -Enabled -AccountPassword (Read-Host -AsSecureString "AccountPassword") -Passthru # You can test the credential using the following function Test-ADSICredential -AccountName "fxtest04" -AccountPassword (Read-Host -AsSecureString "AccountPassword") .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)] [String]$SamAccountName, [System.Security.SecureString]$AccountPassword, [switch]$Enabled = $false, [String]$GivenName, [String]$SurName, [String]$UserPrincipalName, [String]$DisplayName, [String]$Name, [Switch]$PasswordNeverExpires = $false, [Switch]$UserCannotChangePassword = $false, [Switch]$PasswordNotRequired = $false, [System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $Credential = [System.Management.Automation.PSCredential]::Empty, [String]$DomainName, [Switch]$Passthru ) 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($SamAccountName, "Create User Account")) { Write-Verbose -message "Build the user object" $User = New-Object -TypeName System.DirectoryServices.AccountManagement.UserPrincipal -ArgumentList $context Write-Verbose -message "set the properties" $User.SamAccountName = $SamAccountName $User.Enabled = $Enabled $user.PasswordNeverExpires = $PasswordNeverExpires $user.UserCannotChangePassword = $UserCannotChangePassword $User.PasswordNotRequired = $PasswordNotRequired IF ($PSBoundParameters['Name']) { $User.Name = $Name } IF ($PSBoundParameters['DisplayName']) { $User.DisplayName = $DisplayName } IF ($PSBoundParameters['GivenName']) { $User.GivenName = $GivenName } IF ($PSBoundParameters['SurName']) { $User.SurName = $SurName } IF ($PSBoundParameters['UserPrincipalName']) { $User.UserPrincipalName = $UserPrincipalName } IF ($PSBoundParameters['Description']) { $user.Description = $Description } IF ($PSBoundParameters['EmployeeId']) { $user.EmployeeId = $EmployeeId } IF ($PSBoundParameters['HomeDirectory']) { $user.HomeDirectory = $HomeDirectory } IF ($PSBoundParameters['HomeDrive']) { $user.HomeDrive = $HomeDrive } IF ($PSBoundParameters['MiddleName']) { $user.MiddleName = $MiddleName } IF ($PSBoundParameters['VoiceTelephoneNumber']) { $user.VoiceTelephoneNumber } IF ($PSBoundParameters['AccountPassword']){$User.SetPassword($AccountPassword)} Write-Verbose -message "Create the Account in Active Directory" $User.Save($Context) } } CATCH { Write-Error $Error[0] break } } END { IF ($PSBoundParameters['Passthru']) { $ContextSplatting.Remove("ContextType") Get-ADSIUser -Identity $SamAccountName @ContextSplatting } } } |