首页 > 解决方案 > 从powershell列出Access DB中的所有表名

问题描述

我使用连接到访问数据库。

$Conn = New-Object -ComObject ADODB.Connection
$Conn.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$FullPath`";Persist Security Info=False;")

这很好用。我可以从各种表中读取和更新没有问题。但我想做的是列出数据库中的所有表。

我找到了这个

$Conn.GetOleDbSchemaTable([System.Data.OleDb.OleDbSchemaGuid]::tables,$null) | ForEach-Object { 
        $_?
        write-host $_.TABLE_NAME $_.TABLE_TYPE
        $Zones = $_.table_name
    }

但我收到错误消息。

在看了很多网站之后,我真的没有找到任何东西。

列出表格后,我将继续列出每个表格中的字段。

我收到以下错误消息。

[DBG]: PS C:\WINDOWS\system32\WindowsPowerShell\v1.0>>     $Conn.GetOleDbSchemaTable([System.Data.OleDb.OleDbSchemaGuid]::tables,$null)
Les arguments sont de type incorrect, en dehors des limites autorisées ou en conflit les uns avec les autres.
Au caractère Ligne:1 : 5
+     $Conn.GetOleDbSchemaTable([System.Data.OleDb.OleDbSchemaGuid]::ta ...
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (:) [], COMException
    + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException

翻译

超出授权范围。或相互冲突。

提前致谢。

标签: databasepowershellms-accessadodb

解决方案


getoledbschematable

...当您在数组中传递值时,为不包含值的数组元素包含空字符串或空值。如果将空数组传递给限制,则所有行(每个表一个)都按默认顺序返回。...

调用时您的代码失败$Conn.GetOleDbSchemaTable,因为您使用了正确的tablesGUID,您的第二个参数可能是错误的。尝试使用空数组是否可以解决问题:

$emptyArray = @()
$Conn.GetOleDbSchemaTable([System.Data.OleDb.OleDbSchemaGuid]::tables, $emptyArray) | ForEach-Object { 

    write-host $_.TABLE_NAME $_.TABLE_TYPE
    $Zones = $_.table_name
}

如上述评论中所述,还删除了该$_?语句,该语句不是有效的 PowerShell 代码。

希望能解决您的问题。


推荐阅读