Сжатие и восстановление базы данных Access 2007 с помощью Powershell

Я пытаюсь использовать 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 метод с использованием пароля? Спасибо

1 ответ

Попробуй это:

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

Удалить -ComObject с линии:

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

Microsoft.Office.Interop.Access.Dao.DBEngine будет управляемая оболочка взаимодействия DAO.DBEngine так что вам не нужно -ComObject переключатель.

Другие вопросы по тегам