仕事で使いそうだったので.
出来ればこんなの使いたくない.
####################################################################### # 概要 # mdbファイルを開いてテーブルの内容をExcelへ出力する # 書式 # export-mdb.ps1 [mdbファイルへの相対パス] [mdbファイルパスワード] ####################################################################### Param($filename, $password) # 指定テーブルを指定シートへエクスポートする function ExportTable { param ( $con, $sheet, $tableName ) $rs = New-Object -ComObject "ADODB.Recordset" $sql = "SELECT * FROM ${tableName}" $rs.Open($sql, $con, 3, 3) # テーブル名 $col_idx = 1 $row_idx = 1 foreach ($f in $rs.Fields) { $sheet.Cells.Item($row_idx, $col_idx) = $f.name $col_idx += 1 } $row_idx += 1 # データ内容 $rs.MoveFirst() while ($rs.EOF -eq $false) { $col_idx = 1 foreach ($f in $rs.Fields) { $sheet.Cells.Item($row_idx, $col_idx) = $rs.Fields.Item($f.Name).Value $col_idx += 1 } $rs.MoveNext() $row_idx += 1 } $rs.Close() } # MDBファイルのファイルパスを組み立てる $filepath = join-path $PSScriptRoot $filename $excel_filepath = join-path $PSScriptRoot "exported.xlsx" $connection_string = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = ${filepath};" # パスワード指定の場合にはパスワードをConnectionStringへ加える if($password -ne '') { $connection_string += "Jet OLEDB:Database Password = ${password};" } # Excelを開いてブックを作る $excel = New-Object -ComObject Excel.Application $excel.visible = $false $excel.DisplayAlerts = $false $book = $excel.Workbooks.Add() # mdbを開く $catalog = New-Object -ComObject "ADOX.Catalog" $con = New-Object -ComObject "ADODB.Connection" $con.Open($connection_string) $catalog.ActiveConnection = $con try { foreach($tbl in $catalog.Tables) { # テーブルのみ出力 if($tbl.type -eq "table") { # シートを加える $sheet = $book.Worksheets.Add() $sheet.name = $tbl.name ExportTable $con $sheet $tbl.name } } $book.SaveAs($excel_filepath) } finally { $con.Close() $excel.Quit() $excel = $null }