Accedere ad un Database Access via PowerShell

MS Access non è un database che apprezzo molto... ma a volte capita di doversi interfacciare con software che ne fanno uso. Nel mio caso ho avuto necessita di estrarre dei dati da alcune tabelle, e l'ho fatto tramite PowerShell di Windows.

Prima di cominciare dobbiamo assicurarci di:

  • Abilitare l'esecuzione degli script PowerShell, ad esempio lanciando una shell come amministratore e digitando il comando Set-ExecutionPolicy Unrestricted
  • Avere installato Access oppure "Access Database Engine" (sono driver per poter accedere ai files MDB senza avere installato Access).  E' possibile scaricare gratuitamente l'engine dall'url https://www.microsoft.com/en-us/download/details.aspx?id=39358

Lo script

Per accedere al database useremo le API AdoDB di Microsoft.

Creiamo un file elabora.ps1 (potete usare anche il notepad):

--- inizio file elabora.ps1 ---   

$adOpenStatic = 3
$adLockOptimistic = 3
$cn = new-object -comobject ADODB.Connection
$rs = new-object -comobject ADODB.Recordset

# qui definiamo il percorso completo del file con il database access  
$path = "C:\percorso\database.mdb"

# otteniamo una connessione al database
$cn.Open("Provider = Microsoft.ACE.OLEDB.12.0;Data Source = $path")

# eseguiamo una query (sostituitela con quella utile alle vostre esigenze)
$rs.Open("SELECT * FROM tabella", $cn, $adOpenStatic, $adLockOptimistic)

# analizziamo i risultati record per record
while(!$rs.EOF) {
    # effettuiamo qualche elaborazione del record corrente
    # (in questo caso ci limitiamo a stampare un campo sulla console)

    $campo = 
$rs.Fields.Item("NOME_CAMPO").Value
    Write-host "Il valore del campo è " $campo
    $rs.MoveNext()
}

--- fine file elabora.ps1 ---

Possiamo lanciare lo script cliccando sull'icona del file, oppure se siamo dentro una shell dei comandi digitando:

powershell -file elabora.ps1

Conclusioni

Applicando questa metodologia accedere ai files di Access si è rivelato abbastanza semplice, e soprattutto ho apprezzato il fatto di non aver avuto necessità di installare un Access completo.