我有一个多用户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命令需要做什么?
答案 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