我尝试使用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
方法?感谢
答案 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