2015-10-30 8 views
2

Из кода VBA в Access 2013 Я пытаюсь запустить сценарий PowerShell, который принимает 1 параметр. Этот параметр предоставляется (и устанавливается) из Access (VBA).Предоставление параметра от VBA до Powershell

Хотя я заметил, что сценарий не был правильно пропущен правильным путем. Он запускает приложение, которое объединяет некоторые файлы PDF. Приведенный параметр позволяет приложению узнать, какая папка, содержащая файлы PDF, должна сливаться.

Этот параметр, однако, не был учтен.

Мой VBA скрипт это следующим образом:

Err = Shell("powershell.exe -ExecutionPolicy Unrestricted -File G:\OPSPDF\MergeFiles.ps1 -path """ & MergedFolder & """ ", 1) 

Параметр MergedFolder представляет собой строку путь к папке, которая содержит PDF файлы для слияния ("O:\documents\somefiles")

Мой PowerShell скрипт выглядит следующим образом:

param([String] $inputfolder) 

$PDFtk = "D:\Test\pdftk.exe" 
$outputfile = "MergedFile.pdf" 

dir $inputfolder -r -include *.pdf -exclude $outputfile | group DirectoryName | 
% {& $PDFtk $_.group CAT OUTPUT "$($_.Name)\$outputfile"} 

cmd /c pause | out-null 

PDFtk - это место, где должно быть запущено exe. Пауза встроена, чтобы понять, что происходит не так.

Потому что оно не работает правильно, я try'd повторить мой заданный параметр из VBA в сценарии Powershell так:

param([String] $inputfolder) 

echo $inputfolder 

$PDFtk = "D:\Test\pdftk.exe" 

$outputfile = "MergedFile.pdf" 

dir $inputfolder -r -include *.pdf -exclude $outputfile | group DirectoryName | 
% {& $PDFtk $_.group CAT OUTPUT "$($_.Name)\$outputfile"} 

cmd /c pause | out-null 

Тхо ничего не echo'd так, что заставил меня поверить, что, возможно, там происходит что-то не так с переменной в VBA, заданного в качестве параметра (это содержит некоторые специальные символы, такие как \), поэтому я заменил переменную MergedFolder для жесткого кодированной строки, как это:

Err = Shell("powershell.exe -ExecutionPolicy Unrestricted -File G:\OPSPDF\MergeFiles.ps1 -path "" TestString "" ", 1) 

Но все-таки это не ес хо что-нибудь ... Что я здесь делаю неправильно?

+0

Собственно интерес, если вы вставите ту же самую команду в диалог RUN вы получите тот же результат, или же он работает? –

ответ

0
  1. Вы inputputfolder параметр в сценарии ($inputfolder), но вы передаете -path параметр в коде VBA.

  2. Попробуйте удалить кавычки вокруг тестовой строки:

    Err = Shell("powershell.exe -ExecutionPolicy Unrestricted -File G:\OPSPDF\MergeFiles.ps1 -inputfolder TestString", 1) 
    
+0

Нет, к сожалению, все еще не повторяется с предложенными вами модификациями. Также добавлен тест «echo» «за« входной папкой «echo #», чтобы увидеть, действительно ли он что-то делает, но тест «echo» «в скрипте ps работает. – Nicolas

+0

Всякий раз, когда вы используете пути, вам все равно нужны кавычки, чтобы вы могли учитывать пробелы, которые просто разрушат все. Используйте одиночные кавычки или escape-символы: 'Err = Shell (" powershell.exe -ExecutionPolicy Unrestricted -File 'G: \ OPSPDF \ MergeFiles.ps1' -inputfolder 'TestString' ", 1)' –

Смежные вопросы