Powershell Unset Access .mdb 密码 - 密码已知

问题描述

在我的组织中的共享驱动器上有一个 .mdb,它受密码保护,需要保持密码保护。我有密码。我使用本地副本进行数据分析。共享驱动器对我来说非常慢,所以我每天使用 powershell 复制它。我需要手动删除密码,因为我可用的分析软件不支持 .mdb 密码。

以下代码成功打开 .mdb,因此我可以手动取消设置密码,但我想自动取消设置密码。

$path = "C:\path\to\db\"
$file = "db.mdb"  
$access = New-Object -com Access.Application
$access.Visible = $True
$access.OpenCurrentDataBase($path + $file,$True,"password")

我认为我的问题是我不了解 PowerShell 的对象模型实现。我想使用 Database.NewPassword 更改密码。然而,在 VB 实现中,它需要一个数据库对象,当我用 $db = $access.OpenCurrentDataBase($path + $file,"password") 代替 $access.OpenCurrentDataBase($path + $file,"password") 时,$db 变量是 $null

有没有办法在 PowerShell 中引用数据库对象?

解决方法

您可以使用 Access DDL 管理数据库密码。

ALTER DATABASE PASSWORD newpassword oldpassword

这是我使用 PowerShell 删除密码的方法:

$path = "C:\Temp\DbPwd_foo.mdb"
$newpassword = "Null"
$oldpassword = "foo"
$accessApp = new-object -com access.application
$accessApp.OpenCurrentDatabase($path,-1,$oldpassword)
$sql = "ALTER DATABASE PASSWORD " + $newpassword + " " + $oldpassword
$accessApp.CurrentProject.Connection.Execute($sql)
$accessApp.Quit()

您可以通过交换 $newpassword$oldpassword 的值并调用不带密码参数的 OpenCurrentDatabase 来恢复以前的密码。

,

您可以为此使用 DAO,即 DbEngine.Compact 方法。但是,除非您想执行 complicated stuff,否则 powershell 不允许命名参数和跳过选项,这很痛苦。

$path = "C:\path\to\db\"
$file = "db.mdb"
$newfile = "decrypted.mdb"
$dbe= New-Object -com DAO.DbEngine.120
$dbe.Compact($path + $file,$path + $newfile,";LANGID=0x0409;CP=1252;COUNTRY=0",64,";PWD=password")