0

我正在尝试使用 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使用密码的方法?谢谢

4

2 回答 2

0

从行中删除-ComObject

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

Microsoft.Office.Interop.Access.Dao.DBEngine将是一个托管互操作包装器,DAO.DBEngine因此您不需要-ComObject开关。

于 2014-08-09T04:39:30.897 回答
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
于 2018-12-18T12:58:51.750 回答