従来の MS Access アプリケーションのビルドを自動化しています。手順の 1 つで、Access 実行可能ファイル (.ADE) を作成しようとしています。ファイル (PSLibrary.ps1) に保存されている次のコードを思いつきました。
Add-Type -AssemblyName Microsoft.Office.Interop.Access
function Access-Compile {
param (
[Parameter(Mandatory=$TRUE,Position=1)][string]$source,
[Parameter(Mandatory=$TRUE,Position=2)][string]$destination
)
Write-Output "Starting MS Access"
$access = New-Object -ComObject Access.Application
$access.Visible = $FALSE
$access.AutomationSecurity = 1
if (!(Test-Path $source)) { Throw "Source '$source' not found" }
if ((Test-Path $destination)) {
Write-Output "File '$destination' already exists - deleting..."
Remove-Item $destination
}
Write-Output "Compiling '$source' to '$destination'"
$result = $access.SysCmd(603, $source, $destination)
$result
Write-Output "Exiting MS Access"
$access.quit()
}
PowerShell ISE にアクセスして以下のコマンドを実行すると、すべてが正常に機能し、期待される出力が作成されます。
PS C:>& "C:\Temp\PSLibrary.ps1"
PS C:>Access-Compile "C:\Working\Project.adp" "C:\Working\Project.ade"
ただし、自動ビルドの場合のように、コマンドラインからこれを実行するための適切な hocus-pocus を生成できないようです。例えば、
powershell.exe -command "& \"C:\\Temp\\PSLibrary.ps1\" Access-Compile \"C:\\Temp\\Project.adp\" \"C:\\Temp\\Project.ade\""
私は何を間違っていますか?