Functions/Accounts/Start-PASAccountImportJob.ps1

Function Start-PASAccountImportJob {
    <#
    .SYNOPSIS
    Add multiple accounts to existing Safes.

    .DESCRIPTION
    Sends a list of accounts to be added to existing safes.
    Must be authenticated with a user who has Add accounts, Update account content, and Update account properties authorization in at least one Safe.
    Returns bulk account upload id or status.

    .PARAMETER source
    Free text that describes the source of the bulk account upload.

    .PARAMETER accountsList
    List of account objects.
    Each account object contains the parameters for that account.
    New-PASAccountObject creates Account Objects with the expected properties.

    .EXAMPLE
    $Accounts = @(
        New-PASAccountObject -uploadIndex 1 -userName SomeAccount1 -address domain.com -platformID WinDomain -SafeName SomeSafe
        New-PASAccountObject -uploadIndex 2 -userName SomeAccount2 -address domain.com -platformID WinDomain -SafeName SomeSafe
        New-PASAccountObject -uploadIndex 3 -userName SomeAccount3 -address domain.com -platformID WinDomain -SafeName SomeSafe
        New-PASAccountObject -uploadIndex 4 -userName SomeAccount4 -address domain.com -platformID WinDomain -SafeName SomeSafe
    )

    Start-PASAccountImportJob -source "SomeSource" -accountsList $Accounts

    Create & send list of accounts to be added as a bulk operation.

    .LINK
    https://pspas.pspete.dev/commands/Start-PASAccountImportJob

    #>

    [CmdletBinding(SupportsShouldProcess)]
    param(
        [parameter(
            Mandatory = $false,
            ValueFromPipelinebyPropertyName = $true
        )]
        [string]$source,

        [parameter(
            Mandatory = $true,
            ValueFromPipelinebyPropertyName = $true
        )]
        [object[]]$accountsList
    )

    Begin {

        Assert-VersionRequirement -RequiredVersion 11.6

        #Create URL for Request
        $URI = "$Script:BaseURI/api/bulkactions/accounts"

    }

    Process {

        #Get all parameters that will be sent in the request
        $boundParameters = $PSBoundParameters | Get-PASParameter

        #Create body of request
        $body = $boundParameters | Get-PASParameter | ConvertTo-Json -Depth 3

        if ($PSCmdlet.ShouldProcess("List of $($accountsList.count) account(s)", "Start Bulk Account Import Job")) {

            #send request
            $Result = Invoke-PASRestMethod -Uri $URI -Method POST -Body $Body -WebSession $Script:WebSession

            If ($null -ne $Result) {

                #Return Results
                try {

                    #Query Import Job Status
                    Get-PASAccountImportJob -id $Result

                }

                catch {

                    #Return Import Job ID
                    [PSCustomObject]@{"id" = $Result }

                }

            }

        }

    }

    End {}

}