Powershell取消设置访问权限.mdb密码-已知密码



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

下面的代码成功地打开了.mdb,这样我就可以手动取消设置密码,但我想自动取消设置密码。

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

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

有没有一种方法可以在PowerShell中引用数据库对象?

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

ALTER DATABASE PASSWORD newpassword oldpassword

以下是我使用PowerShell删除密码的方式:

$path = "C:TempDbPwd_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方法。不过,除非你想做复杂的事情,否则powershell不允许命名参数和跳过选项,这很痛苦。

$path = "C:pathtodb"
$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")

最新更新