AdminBoxData.psm1

function Get-OleDbConnection {   
    [CmdletBinding()]
    param (
        [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$ConnectionString
    )

    $connection = New-Object System.Data.OleDb.OleDbConnection($ConnectionString)
    $connection.Open()
    $connection

}

function Get-AceConnectionString {

    [CmdletBinding()]
    param (
        [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
        [ValidateNotNullOrEmpty()]
        [string]$Path,

        [Parameter(Mandatory=$false)]
        [switch]$NoHeader=$false
    )

    $hdr = if($NoHeader) {'NO'} else {'YES'}

    switch -regex ($Path)
    {
        #'\.xls$|\.xlsx$|\.xlsb$' {"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$Path`";Extended Properties=`"Excel 12.0 Xml;HDR=YES`";"}
        '\.xls$|\.xlsx$|\.xlsb$' {"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"{0}`";Extended Properties=`"Excel 12.0 Xml;HDR={1}`";" -f $Path, $hdr}
        '\.mdb$|\.accdb$'        {"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$Path`";Persist Security Info=False;"}
    }

}

function Get-AceDataTable {
    
    [CmdletBinding()]
    param (
        [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
        [ValidateScript({$_ -match  '\.xls$|\.xlsx$|\.xlsb$|\.mdb$|\.accdb$'})]
        [string]$Path,
        [Parameter(Position=1, Mandatory=$true)]
        [string[]]$Table,
        [Parameter(Position=2, Mandatory=$false)]
        [switch]$NoHeader=$false
    )

    $connection = Get-OleDbConnection -ConnectionString $(Get-AceConnectionString -Path $Path -NoHeader:$NoHeader)
    
    $dataAdapter = new-object System.Data.OleDb.OleDbDataAdapter
    $dataSet = New-Object system.Data.DataSet
    $command = new-object System.Data.OleDb.OleDbCommand
    $command.Connection = $connection

    $Table | foreach { 
            $commandText = "SELECT * FROM [{0}]" -f $_;
            $command.CommandText = $commandText;
            $dataAdapter.SelectCommand = $command;
            $dataTable = New-Object System.Data.DataTable("$_");
            $null = $dataAdapter.Fill($dataTable);
            $dataSet.Tables.Add($dataTable)
    }

    $connection.Close();
    Write-Output $dataSet
}