簡體   English   中英

查找使用Powershell登錄到Access數據庫的用戶

[英]Find users logged into Access database using Powershell

我有一個多用戶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 :未指定:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException

如果刪除中間的$ null變量或將其替換為'',腳本將不會執行,並且我不知道命令是否已從VB正確轉換為powershell。 我已經在Google和SO上進行搜索,但沒有找到任何解決方案。 使用OpenSchema命令需要做什么?

使用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   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM