public/api/New-MBSAPIUser.ps1

function New-MBSAPIUser {
    <#
    .SYNOPSIS
    Creates MBS backup user.
     
    .DESCRIPTION
    Calls POST request to https://api.mspbackups.com/api/Users.
     
    .PARAMETER Email
    Backup user login name.
     
    .PARAMETER FirstName
    Backup user first name.
     
    .PARAMETER LastName
    Backup user last name.
     
    .PARAMETER NotificationEmails
    Backup user notification emails.
     
    .PARAMETER Company
    Company name.
     
    .PARAMETER Enabled
    Backup user status. Specify $false or $true.
     
    .PARAMETER Password
    Backup user password. Use (ConvertTo-SecureString -Force -asplaintext 'test1341343')
     
    .PARAMETER DestinationList
    Array of the backup storage destination collection JSON. Get more https://mspbackups.com/Admin/Help/mbs-api-specification/methods/post-apiusers/destinationfornewuser
     
    .PARAMETER SendEmailInstruction
    Send instructions to notification emails for user.
     
    .PARAMETER LicenseManagementMode
    Licensing mode. Get more https://mspbackups.com/Admin/Help/mbs-api-specification/methods/post-apiusers/usermodetype
     
    .PARAMETER ProfileName
    Profile name used with MSP360 PowerShell for MBS API (set via Set-MBSApiCredential)
 
    .EXAMPLE
    PS C:\> $MyDestinationList = @(@{
        AccountID = "7cf9cbfe-504c-43ca-9a61-ef2f69f8ee91"
        Destination = "cblalexv"
        PackageID = 64130
    },@{
        AccountID = "bdb27298-c831-4be9-ae47-e35a38debacb"
        Destination = "cblalexv"
        PackageID = 64130
    })
    PS C:\> New-MBSAPIUser -Email TestUser -FirstName "My" -LastName "User" -NotificationEmails User@contoso.com -Company Contoso -Enabled $true -Password (ConvertTo-SecureString -Force -asplaintext 'test1341343') -DestinationList $MyDestinationList -SendEmailInstruction $true -LicenseManagementMode 0 -ProfileName Profile
 
    Create new MBS backup user.
    .INPUTS
        None
 
    .OUTPUTS
        String
 
    .NOTES
        Author: Alex Volkov
    .LINK
 
    #>

    
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true, HelpMessage="Email")]
        [string]$Email,
        [Parameter(Mandatory=$false, HelpMessage="FirstName")]
        [string]$FirstName,
        [Parameter(Mandatory=$false, HelpMessage="LastName")]
        [string]$LastName,
        [Parameter(Mandatory=$false, HelpMessage="NotificationEmails")]
        [string[]]$NotificationEmails,
        [Parameter(Mandatory=$false, HelpMessage="Company")]
        [string]$Company,
        [Parameter(Mandatory=$false, HelpMessage="Enabled")]
        [bool]$Enabled = $true,
        [Parameter(Mandatory=$true, HelpMessage="Password")]
        [Securestring]$Password,
        [Parameter(Mandatory=$false, HelpMessage="DestinationList")]
        [array]$DestinationList,
        [Parameter(Mandatory=$false, HelpMessage="SendEmailInstruction")]
        [bool]$SendEmailInstruction,
        [Parameter(Mandatory=$false, HelpMessage="LicenseManagementMode")]
        [int]$LicenseManagementMode,
        #
        [Parameter(Mandatory=$false, HelpMessage="The profile name, which must be unique.")]
        [string]
        $ProfileName
    )
    
    begin {
        $headers = Get-MBSAPIHeader -ProfileName $ProfileName
    }
    
    process {
        $UsersPost = [ordered]@{
            Email = $Email.Trim()
            FirstName = $FirstName
            LastName = $LastName
            NotificationEmails = $NotificationEmails
            Company = $Company.Trim()
            Enabled = $Enabled
            Password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($Password))
            DestinationList = $DestinationList
            SendEmailInstruction = $SendEmailInstruction
            LicenseManagmentMode = $LicenseManagementMode
        }
        if (-not $DestinationList){
            $UsersPost.Remove("DestinationList")
        }
        if (-not $NotificationEmails){
            $UsersPost.Remove("NotificationEmails")
        }
        Write-Verbose -Message ("$($PSCmdlet.MyInvocation.MyCommand.Name): URL: " + (Get-MBSApiUrl).Users)
        Write-Verbose -Message ("$($PSCmdlet.MyInvocation.MyCommand.Name): POST Request: " + ($UsersPost | ConvertTo-Json))
        $UserID = Invoke-RestMethod -Uri (Get-MBSApiUrl).Users -Method Post -Headers $headers -Body ($UsersPost|ConvertTo-Json) -ContentType 'application/json'
        return $UserID
    }
    
    end {
        
    }
}