Я пытаюсь использовать 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 символов: 27 + $ Database = New-Object ‹------------------------------------------------ -ComObject Microsoft.Office.Interop.Access.Dao.DBEngine + CategoryInfo: InvalidType: (:) [New-Object ], PSArgumentException + FullyQualifiedErrorId: CannotLoadComObjectType, Microsoft.PowerShell.Commands.NewObjectCommand
Как мне загрузить правильную библиотеку / COM-объект для завершения операции или есть альтернативный метод для реализации метода .CompactRepair
с использованием пароля? Спасибо