Сжатие и восстановление базы данных 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
переключатель.