2017年5月20日

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



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

#引数の値を変数に格納(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



スポンサーリンク