New-AZTable--v1-0.psm1

$FunctionScriptName = "New-AZTable"
Write-Verbose "Import-Start| [$($FunctionScriptName)]"

#* Dependencies
# Import-Function -Scope "Support" -Function "Get-SAStokenValidity" -Version "1.X"

function New-AZTable {
        <#
        .SYNOPSIS
            New AZ Table
         
        .DESCRIPTION
            Create new AZ Table
            
        .PARAMETER Config
            Config param
            Expects following values: StorageAccount / Sastoken
         
        .PARAMETER StorageAccount
            Storageaccount to use
            Overrides value from config param
                
        .PARAMETER sastoken
            sastoken to use
            Overrides value from config param
         
        .PARAMETER Entity
            Table to create - Expects direct list or single object
       
        .PARAMETER skipSAScheck
            ignore SAStoken check
            recommended if a lot of tables with the same token shall be used
         
        .EXAMPLE
            New-AZTable -Config $Config -Entity $Entity
            $Entity | New-AZTable -Config $Config -sastoken $sastoken
         
        .NOTES
            AUTHOR: Ken Dobrunz // Ken.Dobrunz@Direkt-Gruppe.de | Direkt Gruppe
            WEBSITE: http://kensmagic.site
 
            LASTEDIT: 02.06.2020 - Version: 1.0
        #>

    [cmdletbinding()]
    Param(
        #* Active data
        # StorageConfig - Config or other 2 needed
        [Parameter()][Alias('StorageConfig')]$Config,
        [Parameter()][Alias('Storage')]$StorageAccount,
        [Parameter()][Alias('sas')]$sastoken, 

        # Entity
        [parameter(ValueFromPipeline,Mandatory)][Alias('Table')]$Entity,

        [Parameter()][switch]$skipSAScheck
    )
    Begin {
        $SelfIdentifier = "NewTable"
        Write-Debug "[$($SelfIdentifier)] Start"

        $StorageAccount = if ($StorageAccount) { $StorageAccount }elseif ($Config.StorageAccount) { $Config.StorageAccount }else { Write-Error "[$($SelfIdentifier)] No StorageAccount provided" }
        $sastoken = if ($sastoken) { $sastoken }elseif ($Config.sastoken) { $Config.sastoken }else { Write-Error "[$($SelfIdentifier)] No sastoken provided" }

        if (!$skipSAScheck) {
            if (!(Get-SAStokenValidity -ReadOnlyObject -Table -sastoken $sastoken)) { throw "[$($SelfIdentifier)] Sastoken not valid" }
        }
        else {
            Write-Verbose "[$($SelfIdentifier)] Skipped sas check due to skip flag"
        }

        $Method = "POST"

        $TableAPIHeader = @{
            "x-ms-version" = "2019-07-07"
            Accept         = "application/json;odata=minimalmetadata"
        }

        $functionverbosecount = 0
    }
    Process { 
        $Entity | ForEach-Object {
            $Body = @{TableName=$_} | ConvertTo-Json

            $table_uri = "https://$($StorageAccount).table.core.windows.net/Tables"
            Write-Verbose "[$($SelfIdentifier)] [$($Method)] @ [$($table_uri)] - [$($_)] "
            Invoke-RestMethod -Method $Method -uri ($table_uri + $sastoken) -Headers $TableAPIHeader -ContentType application/json -Body $Body 

            $functionverbosecount++
        }
    }
    End {
        if ($functionverbosecount -gt 1) { Write-Verbose "[$($SelfIdentifier)] processed $($functionverbosecount) entries" }
        Write-Debug "[$($SelfIdentifier)] END"
    }
} #v1.0

Export-ModuleMember -Function *
Write-Verbose "Import-END| [$($FunctionScriptName)]"