Public/New-Record.ps1

function New-Record {
    <#
        .SYNOPSIS
            Creates a new AirTable table record.
    
        .EXAMPLE
            PS> New-Record -BaseName foo -Table bar -Fields { 'Name' = 'new' }

            Creates a new record in the 'bar' table with a field Name value of 'new'.

        .PARAMETER BaseName
            A string value representing the AirTable base that contains the table to query.

        .PARAMETER Table
            A string value representing the AirTable table containing the records to query.

        .PARAMETER Fields
            A hashtable value representing all of the new record's fields. Each key in the hashtable is the
            field name and each corresponding value is the value to update the field to.
   
           .PARAMETER CharSet
                 A string value representing charset like utf-8, which is used for the http-request
            Possible charsets:
            https://www.iana.org/assignments/character-sets/character-sets.xhtml
    
    #>

    [OutputType('void')]
    [CmdletBinding(SupportsShouldProcess)]
    param
    (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [Alias('BaseName', 'BaseId')]
        [string]$BaseIdentity,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]$Table,

        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [hashtable]$Fields,

     [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]$CharSet,

        [switch]$PassThru,

        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]$PersonalAccessToken
    )


    $ErrorActionPreference = 'Stop'

    $baseId = GetBaseId -Identity $BaseIdentity

    $uri = BuildUriString -BaseId $baseId -Table $Table

    $invParams = @{
        Uri      = $uri
        Method   = 'POST'
        HttpBody = @{
        'fields' = $Fields
        'typecast' = $True
    }    
    }
    if($CharSet){
      $invParams.CharSet = $CharSet
    }
    if ($PSBoundParameters.ContainsKey('PersonalAccessToken')) {
        $invParams.PersonalAccessToken = $PersonalAccessToken
    }

    $targetMsg = "New AirTable Record in table [$($Table)]"
    $actionMsg = "Fields [$($Fields.Keys -join ',')] to [$($Fields.Values -join ',')]"
    if ($PSCmdlet.ShouldProcess($targetMsg, $actionMsg)) {
        if ($PassThru.IsPresent){
            InvokeAirTableApiCall @invParams
        } else {
            InvokeAirTableApiCall @invParams | Out-Null
        }
    }
}