1

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()

次に、レコードセットをループして、必要な情報を見つけます。

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 コマンドを使用するには何をする必要がありますか?

4

1 に答える 1

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   
于 2012-11-21T00:20:04.270 に答える