2012-11-20 60 views
1

我有一個多用戶Access數據庫,每天使用PowerShell腳本壓縮。如果仍有用戶登錄,此腳本無法壓縮數據庫。如果有用戶登錄,我希望能夠識別忘記註銷數據庫並提醒他們註銷的用戶一天結束。查找用戶使用Powershell登錄到Access數據庫

如果我在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() 

然後通過記錄循環,找到我需要的信息。

異常呼叫「的OpenSchema」與「3」的參數(一個或多個)::

與所述的OpenSchema線的PS代碼中的錯誤去「對象或提供不能夠執行所請求的操作。」 在FindUsers.ps1:8字符:27 + $ objRs = $ objCon.OpenSchema < < < <([ADODB.SchemaEnum] :: adSchemaProviderSpecific,$ NULL, '{947bb102-5d43-11d1-bdbf-00c04fb92675}') + CategoryInfo:NotSpecified:(:) [],MethodInvocationException + FullyQualifiedErrorId:DotNetMethodException

如果我刪除中間$空變量或'替代它的腳本將不會執行,我不知道該命令從VB正確轉換到powershell。我在Google和SO上搜索過,但沒有找到任何解決方案。我需要做什麼才能使用OpenSchema命令?

+0

如果我在VBScript同樣想法的OpenSchema行看起來像:設置RS = cn.OpenSchema(-1, ,「{947bb102-5d43-11d1-bdbf-00c04fb92675}」)並且正常工作。 – KFleschner

回答

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 
+0

它正在連接,但只是返回第一個用戶而已。我會再玩一些。 – KFleschner

+0

我無法回購該問題。如果打開MS Access文件,然後運行Powershell代碼,則返回兩行: –

+0

我通過將行更改爲$ rt = $ conn.GetOleDbSchema($ guid,$ null)來返回GetOleDBSchema,然後通過foreach($ dt in $ dt){$ u = $ u + $ dr.COMPUTER_NAME +「'r'n」}。我只是在Write-Hose $ u上獲得第一臺計算機名稱。當我看$ u時,有一些有趣的盒子字符,我無法使用.Trim()。 – KFleschner

相關問題