Я автоматизирую сборку устаревшего приложения MS Access, и на одном из этапов я пытаюсь выполнить исполняемый файл Access (.ADE). Я придумал следующий код, который хранится в файле (PSLibrary.ps1):Выполнение сценария Powershell из командной строки с указанными параметрами
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"
Однако, я не могу показаться, чтобы создать правильные фокусы, чтобы получить это работает из командной строки, как я бы в автоматизированной сборке. Например,
powershell.exe -command "& \"C:\\Temp\\PSLibrary.ps1\" Access-Compile \"C:\\Temp\\Project.adp\" \"C:\\Temp\\Project.ade\""
Что я делаю неправильно?
Проблема, с которой я сталкиваюсь, не проявляется при запуске из ISE Powershell; это когда я пытаюсь запустить его из CMD. –
Как мне сделать это как часть автоматической сборки? Это и есть цель моего вопроса. –