Public/New-JiraUser.ps1

function New-JiraUser {
    <#
    .Synopsis
       Creates a new user in JIRA
    .DESCRIPTION
       This function creates a new user in JIRA. By default, the new user
       will be notified via e-mail.
 
       The new user's password is also randomly generated.
    .EXAMPLE
       New-JiraUser -UserName testUser -EmailAddress testUser@example.com
       This example creates a new JIRA user named testUser, and sends a
       notification e-mail. The user's DisplayName will be set to
       "testUser" since it is not specified.
    .EXAMPLE
       New-JiraUser -UserName testUser2 -EmailAddress testUser2@example.com -DisplayName "Test User 2"
       This example illustrates setting a user's display name during
       user creation.
    .INPUTS
       This function does not accept pipeline input.
    .OUTPUTS
       [JiraPS.User] The user object created
    #>

    [CmdletBinding(SupportsShouldProcess = $true)]
    param(
        # Name of user.
        [Parameter(Mandatory = $true)]
        [String] $UserName,

        # E-mail address of the user.
        [Parameter(Mandatory = $true)]
        [Alias('Email')]
        [String] $EmailAddress,

        # Display name of the user.
        [Parameter(Mandatory = $false)]
        [String] $DisplayName,

        # Should the user receive a notification e-mail?
        [Boolean] $Notify = $true,

        # Credentials to use to connect to JIRA.
        # If not specified, this function will use anonymous access.
        [Parameter(Mandatory = $false)]
        [PSCredential] $Credential
    )

    begin {
        Write-Debug "[New-JiraUser] Reading information from config file"
        try {
            Write-Debug "[New-JiraUser] Reading Jira server from config file"
            $server = Get-JiraConfigServer -ConfigFile $ConfigFile -ErrorAction Stop
        }
        catch {
            $err = $_
            Write-Debug "[New-JiraUser] Encountered an error reading configuration data."
            throw $err
        }

        $userURL = "$server/rest/api/latest/user"
    }

    process {
        Write-Debug "[New-JiraUser] Defining properties"
        $props = @{
            "name"         = $UserName;
            "emailAddress" = $EmailAddress;
        }

        if ($DisplayName) {
            $props.displayName = $DisplayName
        }
        else {
            Write-Debug "[New-JiraUser] DisplayName was not specified; defaulting to UserName parameter [$UserName]"
            $props.displayName = $UserName
        }

        Write-Debug "[New-JiraUser] Setting Notify property to $Notify"
        $props.notify = $Notify

        Write-Debug "[New-JiraUser] Converting to JSON"
        $json = ConvertTo-Json -InputObject $props

        Write-Debug "[New-JiraUser] Checking for -WhatIf and Confirm"
        if ($PSCmdlet.ShouldProcess($UserName, "Creating new User on JIRA")) {
            Write-Debug "[New-JiraUser] Preparing for blastoff!"
            $result = Invoke-JiraMethod -Method Post -URI $userURL -Body $json -Credential $Credential
        }

        if ($result) {
            if ($result.errors) {
                Write-Debug "[New-JiraUser] Jira return an error result object."

                $keys = (Get-Member -InputObject $result.errors | Where-Object -FilterScript {$_.MemberType -eq 'NoteProperty'}).Name
                foreach ($k in $keys) {
                    Write-Error "Jira encountered an error: [$($k)] - $($result.errors.$k)"
                }
            }
            else {
                # OK
                Write-Debug "[New-JiraUser] Converting output object into a Jira user and outputting"
                ConvertTo-JiraUser -InputObject $result
            }
        }
        else {
            Write-Debug "[New-JiraUser] Jira returned no results to output."
        }
    }
}