紧凑型使用Powershell修复Access 2007数据库

时间:2014-08-08 14:02:22

标签: powershell ms-access-2007 powershell-v2.0 com-object reference-library

我尝试使用Powershell V2.0以编程方式压缩和修复MS Access 2007(.accdb)数据库。我在下面创建的代码作为最终代码的一部分(在此函数运行之前会发生几个备份过程)。

我遇到了麻烦,因为所有数据库都受密码保护,我需要运行脚本而无需用户手动输入密码。到目前为止,这是我的代码:

Param([string]$strDBPath,[string]$strBUPath,[string]$strPwd)

$ErrorActionPreference = "Stop"

function CompactAndRepairDB {

    regsvr32 "C:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll"
    regsvr32 "C:\Program Files\Microsoft Office\Office12\Acedao.dll"
    regsvr32 "C:\WINNT\assembly\Microsoft.Office.Interop.Access.Dao\12.0.0.__71e9bce111e9429c\Microsoft.Office.Interop.Access.Dao.dll"

    $Database = New-Object -ComObject Microsoft.Office.Interop.Access.Dao.DBEngine
    $Database.CompactRepair($strDBPath,$strBUPath,"","",";pwd=" + $strPwd)

    Remove-Item $strDBPath
    Rename-Item $strBUPath $strDBPath
}

CompactAndRepairDB

代码抛出错误,如下所示:

  

无法加载COM类型Microsoft.Office.Interop.Access.Dao.DBEngine。   在U:\ Scripts \ CompactRepairDatabase.ps1:11 char:27   + $ Database = New-Object<<<< -ComObject Microsoft.Office.Interop.Access.Dao.DBEngine       + CategoryInfo:InvalidType:(:) [New-Object],PSArgumentException       + FullyQualifiedErrorId:CannotLoadComObjectType,Microsoft.PowerShell.Commands.NewObjectCommand

如何加载正确的库/ COM对象以完成操作,或者是否有其他方法可以使用密码实现.CompactRepair方法?感谢

2 个答案:

答案 0 :(得分:0)

从行中删除-ComObject

$Database = New-Object -ComObject Microsoft.Office.Interop.Access.Dao.DBEngine

Microsoft.Office.Interop.Access.Dao.DBEngine将是DAO.DBEngine周围的托管互操作包装,因此您不需要-ComObject切换。

答案 1 :(得分:0)

尝试一下:

Add-Type -AssemblyName Microsoft.Office.Interop.Access
$File =  "Your.accdb"
$DbEng = new-object Microsoft.Office.Interop.Access.Dao.DBEngineClass # no square bracket []
$Db = $DbEng.OpenDatabase($File)
$Db