functions/SPClientUser/New-SPClientUser.ps1


#Requires -Version 3.0

<#
  New-SPClientUser.ps1
 
  Copyright (c) 2017 karamem0
 
  This software is released under the MIT License.
  https://github.com/karamem0/SPClient/blob/master/LICENSE
#>


function New-SPClientUser {

<#
.SYNOPSIS
  Creates a new user.
.DESCRIPTION
  The New-SPClientUser function adds a new user to the site.
.PARAMETER ClientContext
  Indicates the client context. If not specified, uses a default context.
.PARAMETER Name
  Indicates the login name.
.PARAMETER Title
  Indicates the display name.
.PARAMETER Email
  Indicates the E-mail.
.PARAMETER IsSiteAdmin
  Indicates a value whether the user is a site collection administrator.
.PARAMETER Retrieval
  Indicates the data retrieval expression.
.EXAMPLE
  New-SPClientUser -Name "i:0#.f|membership|admin@example.com"
.INPUTS
  None
.OUTPUTS
  Microsoft.SharePoint.Client.User
.LINK
  https://github.com/karamem0/SPClient/blob/master/doc/New-SPClientUser.md
#>


    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $false)]
        [Microsoft.SharePoint.Client.ClientContext]
        $ClientContext = $SPClient.ClientContext,
        [Parameter(Mandatory = $true)]
        [Alias('LoginName')]
        [string]
        $Name,
        [Parameter(Mandatory = $false)]
        [string]
        $Title,
        [Parameter(Mandatory = $false)]
        [string]
        $Email,
        [Parameter(Mandatory = $false)]
        [bool]
        $IsSiteAdmin,
        [Parameter(Mandatory = $false)]
        [string]
        $Retrieval
    )

    process {
        if ($ClientContext -eq $null) {
            throw "Cannot bind argument to parameter 'ClientContext' because it is null."
        }
        $Creation = New-Object Microsoft.SharePoint.Client.UserCreationInformation
        $Creation.LoginName = $Name
        $Creation.Email = $Email
        $Creation.Title = $Title
        $ClientObject = $ClientContext.Site.RootWeb.SiteUsers.Add($Creation)
        if ($PSBoundParameters.ContainsKey('IsSiteAdmin')) {
            $ClientObject.IsSiteAdmin = $IsSiteAdmin
        }
        $ClientObject.Update()
        Invoke-ClientContextLoad `
            -ClientContext $ClientContext `
            -ClientObject $ClientObject `
            -Retrieval $Retrieval
        Write-Output $ClientObject
    }

}