2017年5月20日

【PowerShell】Accessデータベースからデータを取得する



Accessデータベースからデータを取得するスクリプトです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#引数の値を変数に格納(ID)
$id = $args[0]
 
#DBファイル名
$scriptPath = $MyInvocation.MyCommand.Path
$currentPath = Split-Path -Parent $scriptPath
$db = Join-Path $currentPath "test.accdb"
 
#定数
$adOpenStatic = 3 
$adLockOptimistic = 3
 
#オブジェクト作成
$cnn = New-Object -ComObject ADODB.Connection
$rst = New-Object -ComObject ADODB.Recordset
 
#接続
$cnn.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$db")
 
#SQL
$cmd = "SELECT ID, ユーザーID, 名前 FROM T_Users WHERE ID = " + $id
 
#レコードセットOpen
$rst.Open($cmd, $cnn, $adOpenStatic, $adLockOptimistic)
 
#先頭レコードに移動
$rst.MoveFirst() 
 
#レコードの読取 
while($rst.EOF -eq $False)
{
    Write-Host "ID:" $rst.Fields.Item("ID").Value
    Write-Host "ユーザーID:" $rst.Fields.Item("ユーザーID").Value
    Write-Host "名前:" $rst.Fields.Item("名前").Value
    $rst.MoveNext()
}
 
#終了
$rst.Close()
$cnn.Close() 
このスクリプトファイルと同じ場所にある「test.accdb」から「T_Users」というテーブルのデータを取得しています。
データの取得方法は、VBAの場合と同じです。
Connectionで接続し、Recordsetでレコードセットを取得しています。

あと、実行する際には、32ビットで実行するか、64ビットで実行するかに気を付けてください。
インストールされているAccessが32ビット用の場合は、32ビットで実行してください。

実行結果
PS C:\work\access> .\GetAccessData.ps1 2
ID: 2
ユーザーID: 100202
名前: 山田太郎


<参考サイト>
https://gallery.technet.microsoft.com/office/a4a0ade2-e856-48ff-9e91-31b4b6356382



スポンサーリンク



Follow Me on Pinterest
Clip to Evernote