使用 powershell 导出 access 数据库的所有查询

Export all queries of an access database with powershell

This question 演示了如何使用 VBA 执行此操作,但我想使用 PowerShell 执行此操作,因此可以编写脚本和计划。

我预计实现应该是相同的,因为据称它们都使用相同的 COM,但似乎 QueryDefs 没有在 PowerShell 访问的 COM 中定义,因为它 returns 什么都没有。

# Open file in Access.
$accessCOM = New-Object -ComObject Access.Application
$accessCOM.OpenCurrentDataBase($dbPath, $false)

# get list of queries
$queries = $accessCOM.CurrentDB.QueryDefs # returns nothing.

# export query to file
ForEach ($query in $queries) {
    $name = $query.name
    $sql = $query.sql
    $dest = "$queryDest$name.sql"
    Write-Output $sql > $dest
}

我可以使用 .CurrentData.AllQueries,但是 returns 是一个 AccessObjects 集合,我不知道如何从中获取 SQL。有没有其他方法可以从名称中获取 QueryDefs 或至少 SQL?

这适用于我的 Access 2010。它只是将非系统 QueryDef 的名称转储到控制台,但它应该可以帮助您入门:

$dbe = New-Object -com DAO.DBEngine.120
$db = $dbe.OpenDatabase("C:\Users\Public\Database1.accdb")
$queries = $db.QueryDefs
ForEach ($query in $queries) {
    $name = $query.Name
    If (!$name.StartsWith("~")) {
        $name
    }
}

请尝试对之前的 post 进行此修改。为我工作。 在你 运行 它一次之后,变量的其他属性将通过 IntelliSense 在 PowerShell ISE 中可用。

$dbe = New-Object -com DAO.DBEngine.120
$dbpath ="path/to/data.mdb"
$db = $dbe.OpenDatabase($dbpath,$false,$false,";pwd=r3ealLy?")
$queries = $db.QueryDefs
ForEach ($query in $queries) {
    $name = $query.Name
    If (!$name.StartsWith("~")) {
       $name + ":"
       $query.SQL
    }
}