Depending on the driver's capabilities, you may succeed with a single SQL statement like:
"SELECT * INTO newtable FROM oldtable"
With ODBC and Jet the tables may even be IN (keyword) different databases.
Because I really like the "INSERT/SELECT INTO IN" command(s) and never before used Powershell for database 'work':
(Edited) Powershell session:
PS C:\Documents and Settings\eh\My Documents\WindowsPowerShell>
$CS="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=<SOMEWHERE>\Nwind.mdb"
$SQL="SELECT * INTO CusCopy FROM Customers"
$cmd = New-Object system.Data.OleDb.OleDbCommand($SQL,$CS)
$cmd.Connection.Open()
$cmd.ExecuteNonQuery()
91
Please take the "91" as evidence that the command affected==inserted the 91
customers from the original table to the copy.
$SQL="SELECT * INTO [customer.csv] IN '' 'text;HDR=YES;Database=<SOMEWHERE>' FROM Customers"
$cmd = New-Object system.Data.OleDb.OleDbCommand($SQL,$CS)
$cmd.Connection.Open()
$cmd.ExecuteNonQuery()
91
dir
Directory: <SOMEWHERE>
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 14.02.2011 22:09 13395 customer.csv
-a--- 14.02.2011 22:01 2576384 Nwind.mdb
-a--- 14.02.2011 22:09 394 schema.ini
A table .csv and a schema.ini (entry) were newly/dutifully created.