ram*_*mmy 5 powershell ms-access metadata adodb office-automation
我需要获取数百个 MS Access DB 的元数据,因此我需要自动化元数据收集过程。我想查询此处描述的内容,但在查询数据库之前,我需要对MSysObjects表进行读取访问。
我不断收到以下错误:
无法读取记录;没有“MsysObjects”的读取权限。
所以我更深入地挖掘:
我已经阅读了 C# 部分中有关类似问题的文章(请参阅此处以及此一篇)。
我编写了一个简单的脚本,该脚本非常适合创建表等,但我在设置读取访问权限时遇到问题。
$ScrUsr = $(whoami)
Write-Host $ScrUsr
$cmd = "GRANT SELECT ON MSysObjects TO [$ScrUsr]"
Write-Host $cmd
Function Invoke-ADOCommand($Db)
{
$connection = New-Object -ComObject ADODB.Connection
$connection.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$db;" )
$command = New-Object -ComObject ADODB.Command
$command.ActiveConnection = $connection
$command.CommandText = $cmd
$rs = $command.Execute()
$connection.Close()
}
$Db = "C:\Temp\test1.accdb"
Invoke-ADOCommand -db $Db
Run Code Online (Sandbox Code Playgroud)
执行脚本引发以下错误原因:
无法打开 Microsoft Office Access 数据库引擎工作组信息文件。
我怎样才能允许读取权限MSysObjects?
您必须解决两个问题:
与 Access ACCDB 数据库交互时,您的代码将使用 Access 安全帐户“Admin” 。仅当您实施了 Access 用户级安全性 (ULS) 时,其他 Access 安全帐户才可用,但该功能仅适用于 MDB 格式数据库。因此,使用 ACCDB,您无法对“Admin”GRANT以外的任何帐户执行任何操作。
您必须在连接字符串中包含“系统数据库”的位置。
如果您不知道在哪里可以找到系统数据库,请打开 Access 并在“立即”窗口中检查此语句的输出。(Ctrl+g将打开立即窗口)
Debug.Print Application.DBEngine.SystemDb
Run Code Online (Sandbox Code Playgroud)
我的系统数据库是 C:\Users\hans\AppData\Roaming\Microsoft\Access\System1.mdw 在下面的代码示例中替换您的系统数据库。
我不太精通 Powershell,但这个示例对我来说运行没有错误。(请务必更改 和$Db。$SystemDb)
$ScrUsr = $(whoami)
Write-Host $ScrUsr
$cmd = "GRANT SELECT ON MSysObjects TO Admin;"
Write-Host $cmd
Function Invoke-ADOCommand($Db, $SystemDb)
{
$connection = New-Object -ComObject ADODB.Connection
$ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$db;Jet OLEDB:System database=$SystemDb;"
Write-Host $ConnectionString
$connection.Open($ConnectionString)
$discard = $connection.Execute($cmd)
$connection.Close()
}
$Db = "C:\Users\hans\AccessApps\Sample.accdb"
$SystemDb = "C:\Users\hans\AppData\Roaming\Microsoft\Access\System1.mdw"
Invoke-ADOCommand -db $Db -SystemDb $SystemDb
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4383 次 |
| 最近记录: |