从VBA向Powershell提供参数

时间:2015-10-30 14:20:51

标签: vba powershell ms-access powershell-v4.0

从Access 2013中的VBA代码我尝试运行一个接受1个参数的PowerShell脚本。从Access(VBA)中提供(和设置)此参数。

虽然我注意到剧本并没有以正确的方式进行。它运行一个应用程序,将一些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

PDFtkexe应该启动的位置。暂停是为了看看出了什么问题。

因为它没有正常工作,我尝试在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

没有任何东西被回应,所以这让我相信可能在VBA中作为参数给出的变量有问题(这包含一些特殊字符,如\)所以我替换了{{ 1}}一个硬编码字符串的变量,如下所示:

MergedFolder

但它仍然没有回应任何事情......我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

  1. 您的脚本中有inputputfolder参数($inputfolder),但您在VBA代码中传递了-path参数。

  2. 尝试删除测试字符串周围的引号:

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