问题描述
我有一个命令,该命令以静默方式运行程序,它使用XML文件存储数据,并使用Word模板基于过滤器xml文件创建多个Word文档。
我使用的命令是:
"P:\ath to\executable" -Username:Admin -Password:Pa55w0rd -DatadeFinition:"C:\Data.xml" -Datafilter:"C:\Filter.xml" -wordtemplate:"C:\Batch\Paul1.dotx" -Targetdocument:="C:\Batch\Paul1.pdf" -filetype:PDF -Log:"C:\Logs\error.log" -Usage:DocgENSILENT
我需要将其作为我主要管理的PowerShell脚本运行:
set-executionpolicy unrestricted
$datadeFinition = Get-Content "C:\Data file.xml"
$datafilter = Get-Content "C:\Filter for data file.xml"
$wordTemplate = Get-Content "C:\"C:\Template\Paul1.dotx"
$targetFolder = Get-Content "C:\"C:\Paul\Paul.pdf"
Stop-Job = "Executable path" -Username:Admin -Password:Pa55w0rd -DatadeFinition:%dataDeFinition% -Datafilter:%dataFilter% -wordtemplate:%wordTemplate% -Targetdocument:%targetFolder% -filetype:docx -Log:%logPath% -Usage:DocgENSILENT
Stop-Job 1
set-executionpolicy restricted
Write-Host -NoNewLine "Press any key to continue..."
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
我的问题是脚本启动了可执行文件,但没有传递变量,有人可以指导我正确的方向来解决此问题吗?
解决方法
要使此工作正常,取决于可执行文件的行为。我注意到了一些事情:
-
不是吗?
$wordTemplate = Get-Content "C:\"C:\Template\Paul1.dotx"
是这样:
$wordTemplate = "C:\Template\Paul1.dotx"
确定要使用
Get-Content
吗? (除此之外,示例中的路径和引用不正确。) -
不是吗?
$targetFolder = Get-Content "C:\"C:\Paul\Paul.pdf"
是这样:
$targetDocument = "C:\Paul\Paul.pdf"
我怀疑
Get-Content
是否正确,因为大概您的输出文件还不存在?我还重命名了变量,以便在您的命令中更有意义。 -
实际上,您确定其中的任何一个都需要
Get-Content
吗?您不是在指定文件名,而不是文件的内容? -
在PowerShell中,变量的前缀是
$
,而不是被%
包围。 -
在脚本中使用
Set-ExecutionPolicy
来使脚本能够运行是没有意义的,因为该脚本已在运行。 (也就是说,如果执行策略阻止脚本执行,PowerShell将不允许您首先运行脚本。)
如果我对您的变量的猜测是正确的,我认为您的脚本应该看起来像这样(还要注意,我指定了一个$logFile
变量,但在您的脚本中没有看到):
$datadefinition = "C:\Users\Administrator\data\Sample Model_146_object type(s).xml"
$datafilter = "C:\Users\Administrator\data\Sample Model_146_object type(s).xml"
$wordtemplate = "C:\Users\Administrator\Templates\Base object.docx"
$targetdocument = "C:\Users\Administrator\Result\sample test15"
$logfile = "C:\Users\Administrator\Logs\C4W Error.log"
& "C:\Program Files (x86)\Communicator4Word.exe" -Username:Admin -Password: -Datadefinition:$datadefinition -Datafilter:$datafilter -wordtemplate:$wordtemplate -Targetdocument:$targetdocument -filetype:docx -Log:$logfile -Usage:DOCGENSILENT
当您使用Communicator4Word.exe
并且没有密码时,我不知道-Password:
的行为。 (这是语法错误,还是您应该完全省略-Password:
?)