使用Powershell查找登录Access数据库的用户

时间:2012-11-20 16:36:07

标签: ms-access powershell ado

我有一个多用户Access数据库,每天使用powershell脚本进行压缩。如果仍有用户登录,则此脚本无法压缩数据库。如果有用户登录,我希望能够识别忘记注销数据库并提醒他们注销的用户一天结束。

如果我在VB中写这个,它会像这样工作:

Dim cn as ADODB.Connection
Dim rs as ADODB.Recordset
cn.open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=...mdb")
Set rs = cn.OpenSchema(adSchemaProviderSpecific, ,"{947bb102-5d43-11d1-bdbf-00c04fb92675}")

然后遍历记录集并获取我想要的信息。

我想要做的是将其转换为PowerShell,以便它可以使用紧凑的脚本运行。我尝试过以下方法:

$objCon = New-Object -ComObject ADODB.Connection
$objRs = New-Object -ComObject ADODB.Recordset
$objCon.Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=...mdb")
$objRs= $objCon.OpenSchema([ADODB.SchemaEnum]::adSchemaProviderSpecific,$null,'{947bb102-5d43-11d1-bdbf-00c04fb92675}')
$objRs.MoveFirst()

然后遍历记录集并找到我需要的信息。

PS代码在OpenSchema行上出错:

使用“3”参数调用“OpenSchema”的异常:“对象或提供者无法执行请求的操作。” 在FindUsers.ps1:8 char:27 + $ objRs = $ objCon.OpenSchema<<<< ([ADODB.SchemaEnum] :: adSchemaProviderSpecific,$ NULL, '{947bb102-5d43-11d1-bdbf-00c04fb92675}')     + CategoryInfo:NotSpecified:(:) [],MethodInvocationException     + FullyQualifiedErrorId:DotNetMethodException

如果我删除中间的$ null变量或用''替换它,脚本将不会执行,我不知道该命令是否正确地从VB转换为PowerShell。我在Google和SO上搜索过,但没有找到任何解决方案。使用OpenSchema命令需要做什么?

1 个答案:

答案 0 :(得分:1)

这适用于我使用Office 2007及更高版本附带的较新的ACE驱动程序:

$filepath = "C:\Users\u00\Documents\Northwind.mdb"
[guid]$guid = '947bb102-5d43-11d1-bdbf-00c04fb92675'

$ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`"$filepath`";Persist Security Info=False;"
$conn = new-object System.Data.OleDb.OleDbConnection($ConnectionString)
$conn.open()
$conn.GetOleDbSchemaTable($guid,$null) 
$conn.close()

COMPUTER_NAME                    LOGIN_NAME 
-------------                    ---------- 
Z002                             Admin