ACCESSファイルを修正・機能追加した時にPC1台ずつ配布するのに手間が掛かるので改善したい
小中規模のデータベースをACCESSで構築、フロントエンドとバックエンドファイルに分離してフロントエンド部分を各PCにいれて数人で使用しているとフロントエンド部分を修正・機能追加した時にPC1台ずつ配布するのに手間が掛かるので自動で更新するスクリプトをVBScriptで作成していて運用していました。
ですが、2023年10月VBScriptがWindowsクライアントの非推奨の機能リストに追加され、将来的に廃止(削除)されることになり、いつか動かなくなるのではと思い改めてPowerShellスクリプトで作り直したので記録として残しておきます。
目 次
- 動作確認したWindows環境
- データベースと自動更新ファイルの構成
- PowerShellスクリプトファイルの内容
- インターネットオプションのセキュリティ設定
- 実行ファイルとなるバッチファイルの作成
- ショートカットファイルの作成
1.動作確認したWindows環境
Windows10 + Microsoft 365 Apps for business
2.データベースと自動更新ファイルの構成
自動更新の動作内容とファイルの構成は次の通りです。
- デスクトップのショートカットファイル起動
- NASのバッチファイル実行
- コマンドプロンプトでPowerShellスクリプトを実行
- NAS配下とCドライブ配下のフロントエンドファイルのバージョンをチェックしてNAS配下のバージョンを上位の場合はCドライブ配下にフロントエンドファイルをコピーする。
- Cドライブ配下のフロントエンドファイルを開く。
192.168.0.100 #NASのIPアドレス ┗━DBMS ┣━BackEnd.accdb #ACCESSバックエンドファイル ┣━FrontEnd.accdb #ACCESSフロントエンドファイル・・・4 ┣━FrontEnd.ps1 #PowerShellスクリプト本体・・・3 ┗━FrontEnd.bat #PowerShellスクリプトを実行するバッチファイル・・・2 Cドライブ ┗━DBMS ┗━FrontEnd.accdb #実際に起動するフロントエンドファイル・・・5 デスクトップ ┗━FrontEnd.lnk #バッチファイルを起動するショートカットファイル・・・1
3.PowerShellスクリプトファイルの内容
下記のコードをコピーして、#1・#2・#3・#4 の4箇所を環境に合わせて修正して FrontEnd.ps1 として保存。
#引数構文チェックと未定義プロパティのエラー検出
Set-StrictMode -Version 2.0
# MessageBoxを使用可能にするためのアセンブリ読み込み
Add-Type -Assembly System.Windows.Forms
#データーベースシステム名
$dbName = "FrontEnd" #1
#データベースファイルの拡張子
$Ext = "accdb" #2
#データベースファイル名
$dbFile = $dbName + "." + $Ext
#クライアントのフォルダー
$CliPath = "C:\DBMS\" #3
#サーバーのフォルダー
$SvrPath = "\\192.168.0.100\DBMS\" #4
#サーバー側のフルパス
$SvrDB = Join-Path $SvrPath $dbFile
#クライアント側のフルパス
$CliDB = Join-Path $CliPath $dbFile
#定数
$adOpenStatic = 3
$adLockOptimistic = 3
#オブジェクト作成
$cnnC = New-Object -ComObject ADODB.Connection #クライアント側のコネクション
$rstC = New-Object -ComObject ADODB.Recordset #クライアント側のレコードセット
$cnnS = New-Object -ComObject ADODB.Connection #サーバー側のコネクション
$rstS = New-Object -ComObject ADODB.Recordset #サーバー側のレコードセット
#各コネクションに接続
$cnnC.Open("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = $CliDB")
$cnnS.Open("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = $SvrDB")
#クライアント側のバージョン情報を保存しているテーブル(T_Version)とフィールド(version)のSQLをセット
$cmdC = "SELECT version FROM T_Version"
#サーバー側のバージョン情報を保存しているテーブルとフィールドのSQL
$cmdS = "SELECT version FROM T_Version"
#各レコードセットOpen
$rstC.Open($cmdC, $cnnC, $adOpenStatic, $adLockOptimistic)
$rstS.Open($cmdS, $cnnS, $adOpenStatic, $adLockOptimistic)
#各先頭レコードに移動
$rstC.MoveFirst()
$rstS.MoveFirst()
#レコードの読取
while($rstC.EOF -eq $False)
{
$Cver = $rstC.Fields.Item("version").Value
$rstC.MoveNext()
}
while($rstS.EOF -eq $False)
{
$Sver = $rstS.Fields.Item("version").Value
$rstS.MoveNext()
}
#コネクションとレコードセットを閉じる
$rstC.Close()
$cnnC.Close()
$rstS.Close()
$cnnS.Close()
if ($Cver -lt $Sver) {
$Result = [System.Windows.Forms.MessageBox]::Show`
("新しいバージョンがあります。アップデートしますか。", $dbName,"YesNo","Information","button1")
if ($Result -eq "Yes") {
Copy-Item $SvrDB $CliPath
}
}
#クライアント側のデータベースファイルをACCESSで開く
$access = New-Object -ComObject Access.Application
$access.OpenCurrentDatabase($CliDB)
start-process $CliDB $access -WindowStyle Maximized
4.インターネットオプションのセキュリティ設定
NASにスクリプトファイルを入れていると、セキュリティ警告等が出て煩わしいのでインターネットオプションのローカルイントラネットゾーンにNASのIPアドレスを追加する。
- コントロールパネルのインターネットオプションを開く
- セキュリティタブをクリック
- ローカル イントラネットをクリック
- サイトボタンをクリック
- 詳細設定ボタンをクリック
- このWebサイトをゾーンに追加するのボックスに ”192.168.0.100” を入力
- 追加ボタンをクリックして下のWebサイトの項目に追加されているのを確認
- 閉じる→OK→OKとクリックしてインターネットオプションを閉じる。
5.実行ファイルとなるバッチファイルの作成
PowerShellスクリプトファイルをダブルクリックで起動させる方法もあるようですが、各PCのPowerShell権限をいじらなくてはならず、それも手間が掛かるので実行用のバッチファイルを用意してバッチの中で実行ポリシーを指定して実行するようにしました。
下記のコードをコピーして、7行目の”\\192.168.0.100\DBMS\FrontEnd.ps1“の箇所を環境に合わせて修正して FrontEnd.bat として保存。
@if not "%~0"=="%~dp0.\%~nx0" start /min cmd /c,"%~dp0.\%~nx0" %* & goto :eof
@echo off
if "%PROCESSOR_ARCHITECTURE%" NEQ "x86" (
C:\Windows\SysWOW64\cmd.exe /C %0
exit
)
powershell -NoProfile -ExecutionPolicy Unrestricted \\192.168.0.100\DBMS\FrontEnd.ps1
内容を説明しますと、
1行目:自分自身(バッチファイル自身)を最小化して実行
2~6行目:x64版Windows上でバッチファイルをx86起動する
7行目:実行ポリシーを変更したPowerShellを起動してスクリプトを実行する
となっております。
6.ショートカットファイルの作成
5で作成したバッチファイルを右クリック → 送る → デスクトップ(ショートカットを作成)でショートカットファイルを作成する。
バッチファイル直接起動しても良いのですが、ショートカットファイルのプロパティからアイコン変更することで起動した時のタスクバーのアイコンを変えることが出来るので何個かデータベースを扱っていると起動しているデータベースが判別しやすくなるので便利です。
↓↓ 参考にさせて頂いた記事 ↓↓
- 【Powershell】UnauthorizedAccessと出てスクリプトが実行できないときの対処法|はむてつの仕事場-IT業務改善を求めて
- 「バッチファイルを最小化して起動」 | 火蛾の深潭
- x64版Windows上でバッチファイルをx86起動する方法 | Kerosoft
おまけ
今ももちろん良いのだが、この頃が個人的には好きだなあと思う曲の4K版Music Video
宇多田ヒカル「Wait & See 〜リスク〜」Music Video(4K UPGRADE )